1. LabelBinarizer
来自 sklearn.preprocessing 的一个实用工具,将标签型数据转换为 0 或 1,对于二类以上的数据,转换为对应的 onehot 向量,具体看例子:
from sklearn.preprocessing import LabelBinarizer
from sklearn import tree
# 特征矩阵
featureList=[[1,0],[1,1],[0,0],[0,1]]
# 标签矩阵
labelList=['yes', 'no', 'no', 'yes']
# 将标签矩阵二值化
encoder = LabelBinarizer()
label=encoder.fit_transform(labelList)
print(label)
# 模型建立和训练
clf = tree.DecisionTreeClassifier()#决策树分类器
clf = clf.fit(featureList, label)
p=clf.predict([[0,1]])
print(p)
# 逆过程
yes_or_no=encoder.inverse_transform(p)
print(yesORno)
>>
[[1]
[0]
[0]
[1]]
[1]
['yes']
>>
多种类型可以转换为对应的 onehot 向量,类似于这种:
salary_onehot = encoder.fit_transform(data['salary'])#转换成onehot
print('salary_onehot:',salary_onehot)
>>
[[0 0 1]
[0 0 1]
[0 1 0]
...
[0 0 1]
[1 0 0]
[0 1 0]]
2. StandardScaler
- 数据归一化:
机器学习应用的时候大部分时间是花费在特征处理上,其中很关键的一步就是对特征数据进行归一化,为什么要进行归一化呢?
- 归一化后加快了梯度下降求最优解的速度:
如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛 - 归一化有可能提高精度:
一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要) -
StandardScaler 原理:
去均值和方差归一化,且是针对每一个特征维度来做的,而不是针对样本,
from sklearn.preprocessing import StandardScaler
import numpy as np
x_np = np.array([[1.5, -1., 2.],
[2., 0., 0.]])
scaler = StandardScaler()
x_train = scaler.fit_transform(x_np)
print(x_np)
print(x_train)
网友评论