分类特征编码_独热编码
为了解决这个问题,我们可以使用一种叫做"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)\)