参考
python机器学习笔记:sklearn库的学习
https://www.cnblogs.com/wj-1314/p/10179741.html
正则化 normalize
-
L2范数正则化
- 原来的L2范数:对每个样本(每行)求平方和再开方
- 每个数据除以原来的L2范数,可以保证每一个样本(每一行)新数据的L2范数都是1
- 示例
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
X_normalized = preprocessing.normalize(X, norm='l2')
>>> X_normalized
array([[ 0.40824829, -0.40824829, 0.81649658],
[ 1. , 0. , 0. ],
[ 0. , 0.70710678, -0.70710678]])
>>> 0.40824829**2 + (-0.40824829)**2 + 0.81649658**2
0.9999999977275447
>>> 1+1+4
6
>>> 1/6
0.16666666666666666
>>> 1/np.sqrt(6)
0.4082482904638631
one-hot 编码
- 特征之间的距离计算 更加合理。
- sklearn.preprocessing.OneHotEncoder()
- 该函数可以帮助自动确定每个属性的取值范围
如属性A的取值有‘0,1’,则1 可以表示为01,
如属性B的取值有‘0,1,2’,则 1 可以表示为010,
结果就是连接后的01_010 - 示例
四个样本,属性A可以取[0,1],属性B可以取[0,1,2],属性C可以取[0,1,2,3]
index based on 0,样本[0, 0, 3] 就表示为10_100_0001
>>> data = [[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]
>>> encoder = preprocessing.OneHotEncoder().fit(data)
encoder.transform(data).toarray()
array([[1., 0., 1., 0., 0., 0., 0., 0., 1.],
[0., 1., 0., 1., 0., 1., 0., 0., 0.],
[1., 0., 0., 0., 1., 0., 1., 0., 0.],
[0., 1., 1., 0., 0., 0., 0., 1., 0.]])