【sklearn学习】数据预处理和特征工程
主成分分析 sklearn.PCA
特征選擇 sklearn.feature_selection
特征處理 sklearn.preprocessing
特征提取 sklearn.feature_extraction
數(shù)據(jù)預(yù)處理
數(shù)據(jù)無量綱化
將不同規(guī)格的數(shù)據(jù)轉(zhuǎn)換到統(tǒng)一規(guī)格,或不同分布的數(shù)據(jù)轉(zhuǎn)化到,這種需求統(tǒng)稱為將數(shù)據(jù)"無量綱化"
線性無量綱化
中心化:讓所有記錄減去一個(gè)固定值
縮放處理:除以一個(gè)固定值,如取對數(shù)
- preprocessing.MinMaxScaler
數(shù)據(jù)歸一化,數(shù)據(jù)按照最小值中心化,再按極差(最大值、最小值)縮放,數(shù)據(jù)移動(dòng)了最小值個(gè)單位,并且會(huì)被收斂到[0, 1]之間。
>>> from sklearn.preprocessing import MinMaxScaler >>> data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] >>> scaler = MinMaxScaler() >>> print(scaler.fit(data)) MinMaxScaler() >>> print(scaler.data_max_) [ 1. 18.] >>> print(scaler.transform(data)) [[0. 0. ][0.25 0.25][0.5 0.5 ][1. 1. ]] >>> print(scaler.transform([[2, 2]])) [[1.5 0. ]] # 訓(xùn)練和導(dǎo)出結(jié)果一步達(dá)成 result = scaler.fit_transform(data)# 將歸一化后的結(jié)果逆轉(zhuǎn) scaler.inverse_transform(result)# 數(shù)據(jù)量太大無法訓(xùn)練使用partial_fit scaler = scaler.partial_fit(data)- preprocessing.StandardScaler
當(dāng)數(shù)據(jù)按均值中心化后,再按標(biāo)準(zhǔn)差縮放,數(shù)據(jù)就會(huì)服從均值為0,方差為1的正態(tài)分布,這個(gè)過程叫做數(shù)據(jù)標(biāo)準(zhǔn)化。
>>> from sklearn.preprocessing import StandardScaler >>> data = [[0, 0], [0, 0], [1, 1], [1, 1]] >>> scaler = StandardScaler() >>> print(scaler.fit(data)) StandardScaler() >>> print(scaler.mean_) [0.5 0.5] >>> print(scaler.transform(data)) [[-1. -1.][-1. -1.][ 1. 1.][ 1. 1.]] >>> print(scaler.transform([[2, 2]])) [[3. 3.]]大多數(shù)機(jī)器學(xué)習(xí)算法中,會(huì)選擇StandardScaler進(jìn)行特征縮放,因?yàn)镸inMaxScaler對異常值敏感
數(shù)據(jù)需要壓縮到[0, 1]區(qū)間時(shí),使用MinMaxScaler
- sklearn.impute.SimpleImputer()
填補(bǔ)缺失值
| 參數(shù) | 含義 |
| missing_values | 缺失值樣式,默認(rèn)為np.nan |
| strategy | "mean"均值、”median“中值、”most_frequent“眾數(shù) |
| fill_value | strategy為”constant“時(shí),可輸入字符串或數(shù)字表示填充值 |
| copy | 默認(rèn)True,創(chuàng)建特征矩陣的副本 |
- preprocessing.LabelEncoder
將分類轉(zhuǎn)換為分類數(shù)值
>>> from sklearn.processing import LabelEncoder >>> le = preprocessing.LabelEncoder() >>> le.fit(["paris", "paris", "tokyo", "amsterdam"]) LabelEncoder() # 查看特征中有多少個(gè)類別 >>> list(le.classes_) ['amsterdam', 'paris', 'tokyo'] >>> le.transform(["tokyo", "tokyo", "paris"]) array([2, 2, 1]...) >>> list(le.inverse_transform([2, 2, 1])) ['tokyo', 'tokyo', 'paris']- preprocessing.OneHotEncoder
獨(dú)熱編碼,創(chuàng)建啞變量
labelEncoder轉(zhuǎn)換后存在大小關(guān)系,不適合無大小關(guān)系的變量
>>> enc = OneHotEncoder(handle_unknown='ignore') >>> X = [['Male', 1], ['Female', 3], ['Female', 2]] >>> enc.fit(X) OneHotEncoder(handle_unknown='ignore') >>> enc.categories_ [array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)] >>> enc.transform([['Female', 1], ['Male', 4]]).toarray() array([[1., 0., 1., 0., 0.],[0., 1., 0., 0., 0.]]) >>> enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]]) array([['Male', 1],[None, 2]], dtype=object) >>> enc.get_feature_names_out(['gender', 'group']) array(['gender_Female', 'gender_Male', 'group_1', 'group_2', 'group_3'], ...) >>> drop_enc = OneHotEncoder(drop='first').fit(X) >>> drop_enc.categories_ [array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)] >>> drop_enc.transform([['Female', 1], ['Male', 2]]).toarray() array([[0., 0., 0.],[1., 1., 0.]])處理連續(xù)型數(shù)據(jù)
- sklearn.preprocessing.Binarizer
根據(jù)閾值將數(shù)據(jù)二值化,用于處理連續(xù)型變量。大于閾值映射為1,小于閾值映射為0
>>> from sklearn.preprocessing import Binarizer >>> X = [[ 1., -1., 2.], ... [ 2., 0., 0.], ... [ 0., 1., -1.]] >>> transformer = Binarizer().fit(X) # fit does nothing. >>> transformer Binarizer() >>> transformer.transform(X) array([[1., 0., 1.],[1., 0., 0.],[0., 1., 0.]])- preprocessing.KBinsDiscretizer
將連續(xù)型變量劃分為分類變量,能夠?qū)⑦B續(xù)型變量排序后按順序分箱后編碼
>>> from sklearn.preprocessing import KBinsDiscretizer >>> X = [[-2, 1, -4, -1], ... [-1, 2, -3, -0.5], ... [ 0, 3, -2, 0.5], ... [ 1, 4, -1, 2]] >>> est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform') >>> est.fit(X) KBinsDiscretizer(...) >>> Xt = est.transform(X) >>> Xt array([[ 0., 0., 0., 0.],[ 1., 1., 1., 0.],[ 2., 2., 2., 1.],[ 2., 2., 2., 2.]]) 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【sklearn学习】数据预处理和特征工程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【sklearn学习】随机森林分类、回归
- 下一篇: 深情鬼攻略有哪些