1. 程式人生 > 其它 >scikit基礎與機器學習入門(6)編碼,增加多項式特徵和缺失值處理

scikit基礎與機器學習入門(6)編碼,增加多項式特徵和缺失值處理

分類特徵編碼_獨熱編碼

為了解決這個問題,我們可以使用一種叫做"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)\)

很喜歡聽到一個老師說的“半年理論”,現在做出的努力,一般要在半年的沉澱之後,才能出結果,所以在遇到瓶頸之時,不妨再努力半年