scikit基礎與機器學習入門(6)編碼,增加多項式特徵和缺失值處理
阿新 • • 發佈:2021-09-19
分類特徵編碼_獨熱編碼
為了解決這個問題,我們可以使用一種叫做"one-of-K"或稱做"one-hot"(獨熱)的編碼方式。即兩
個特徵值來進行編碼性別[1,0]表示"male",而[0,1]表示"female"。通常使用"one-hot"方式編碼後會
增加資料的維度和稀疏性。
from sklearn import preprocessing X = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]] onehot = preprocessing.OneHotEncoder() onehot.fit_transform(X).toarray() # 將稀疏矩陣轉化為普通矩陣
如果訓練集中有沒有出現的實際存在的值,必須顯式地設定\(n\_values\)
# 如果訓練集中有丟失的分類特徵值,必須顯式地設定 n_values
encoder = preprocessing.OneHotEncoder(n_values=[2,4,4])
encoder.fit_transform(X).toarray()
處理缺失值
除了DataFrame中的方法,sklearn也包括填充缺失值的方法
import numpy as np from sklearn.preprocessing import Imputer # 策略有 mean,most_frequent,median imp = Imputer(missing_values='NaN', strategy='mean', axis=0) imp.fit([[1, 2], [np.nan, 3], [7, 6]]) #fit求得第一列特徵均值為4,第二列特徵均值為11/3 X = [[np.nan, 2], [6, np.nan], [7, 6]] print(imp.transform(X))
直接使用特徵和無法找到分割決策邊界,線性不可分 。使用多項式特徵後,可以找到分割決策
邊界:\(X_1^{2}+X_2^{2}-1=0\)
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
X = np.arange(6).reshape(3, 2)
poly = PolynomialFeatures(2) #這是最高的多項式次數
print(X)
print(poly.fit_transform(X))
X 的特徵已經從\((X_1,X_2)\)轉換為\((1,X_1,X_2,X_1^{2},X_1X_2,X_2^{2})\)
在一些情況下,只需要特徵間的互動項,這可以通過設定 interaction_only=True 來得到
poly2 = PolynomialFeatures(2,interaction_only=True)
print(poly2.fit_transform(X))
X 的特徵已經從\((X_1,X_2)\)轉換為\((1,X_1,X_2,X_1X_2)\)
很喜歡聽到一個老師說的“半年理論”,現在做出的努力,一般要在半年的沉澱之後,才能出結果,所以在遇到瓶頸之時,不妨再努力半年