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))

scikit基础与机器学习入门(6)编码,增加多项式特征和缺失值处理

直接使用特征和无法找到分割决策边界,线性不可分 。使用多项式特征后,可以找到分割决策
边界:\(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))

scikit基础与机器学习入门(6)编码,增加多项式特征和缺失值处理

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))

scikit基础与机器学习入门(6)编码,增加多项式特征和缺失值处理

X 的特征已经从\((X_1,X_2)\)转换为\((1,X_1,X_2,X_1X_2)\)

上一篇:刷题记录Day03.9.回文数


下一篇:机器学习实战(基于scikit-learn和TensorFlow)-第十一章训练深度神经网络笔记(一)