GitHub项目:https://github.com/mstampfer/Coursera-Stanford-ML-Python
第1章 监督学习
监督学习是指在有标记的 样本(labeled samples)上建立机器学习的模型。
无监督学习算法就会以最合理的方式将数据集分 成确定数量的组别。
建立书中的各种模型时,将使用许多Python程序包,像NumPy、SciPy、scikit-learn、 matplotlib等。
包括安装包和使用文档:直接执行pip install scikit-learn等;
NumPy:http://docs.scipy.org/doc/numpy-1.10.1/user/install.html
SciPy:http://www.scipy.org/install.html
scikit-learn:http://scikit-learn.org/stable/install.html
matplotlib:http://matplotlib.org/1.4.2/users/installing.html
预处理技术:
1. 均值移除(Mean removal)
2. 范围缩放(Scaling)
3. 归一化(Normalization)
4. 二值化(Binarization)
5. 独热编码
import numpy as np
from sklearn import preprocessing
data = np.array([[3, -1.5, 2, -5.4], [0, 4, -0.3, 2.1], [1, 3.3, -1.9, -4.3]])
#Mean removal
data_standardized = preprocessing.scale(data)
print "\nMean =", data_standardized.mean(axis=0)
print "Std deviation =", data_standardized.std(axis=0)
#Scaling
data_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
data_scaled = data_scaler.fit_transform(data)
print "\nMin max scaled data =", data_scaled
#Normalization
data_normalized = preprocessing.normalize(data, norm='l1')
print "\nL1 normalized data =", data_normalized
#Binarization
data_binarized = preprocessing.Binarizer(threshold=1.4).transform(data)
print "\nBinarized data =", data_binarized
#OneHotEncoder
encoder = preprocessing.OneHotEncoder()
encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print "\nEncoded vector =", encoded_vector
文章解读:
数据预处理
1.3.均值移除(Mean removal)
我们知道,在训练模型的时候,要输入features,即因子,也叫特征。对于同一个特征,不同的样本中的取值可能会相差非常大,一些异常小或异常大的数据会误导模型的正确训练;另外,如果数据的分布很分散也会影响训练结果。以上两种方式都体现在方差会非常大。
机器学习算法无法理解原始数据,所以需对原始数据进行预处理,常用预处理如下:
预处理主要使用了preprocessing包,所以需对该包进行导入:
import numpy as np
from sklearn import preprocessing
data = np.array([[3, -1.5, 2, -5.4], [0, 4, -0.3, 2.1], [1, 3.3,-1.9, -4.3]])
data_standardized = preprocessing.scale(data)
print ("\nMean =", data_standardized.mean(axis=0))
print ("\nStd deviation =", data_standardized.std(axis=0))
输出out:
Mean = [ 5.55111512e-17 -1.11022302e-16 -7.40148683e-17 -7.40148683e-17]
Std deviation = [1. 1. 1. 1.]
将特征数据的分布调整成标准正太分布,即:使得数据的均值为0,方差为1.标准化是针对 每一列 而言的。计算公式为
x_new = (x - μ) /σ
结果如上图。
2.特征缩放(feature scaling)
它把原始数据映射到[0-1]之间,公式为:
data_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
data_scaled = data_scaler.fit_transform(data)
print ("\nMin max scaled data =", data_scaled)
out:
Min max scaled data = [[1. 0. 1. 0. ]
[0. 1. 0.41025641 1. ]
[0.33333333 0.87272727 0. 0.14666667]]
3.归一化(Normalization)
数据归一化用于需要对特征向量的值进行调整时,以保证每个特征向量的值都缩放到相同的
数值范围。机器学习中最常用的归一化形式就是将特征向量调整为L1范数,使特征向量的数值之和为1。
data_normalized = preprocessing.normalize(data, norm='l1')
print ("\nL1 normalized data =", data_normalized)
out:
L1 normalized data = [[ 0.25210084 -0.12605042 0.16806723 -0.45378151]
[ 0. 0.625 -0.046875 0.328125 ]
[ 0.0952381 0.31428571 -0.18095238 -0.40952381]]
4. 二值化(Binarization)
二值化用于将数值特征向量转换为布尔类型向量。增加下面两行代码到前面的Python文件中:
data_binarized = preprocessing.Binarizer(threshold=1.4).transform(data)
print ("\nBinarized data =", data_binarized)
out:
Binarized data = [[1. 0. 1. 0.]
[0. 1. 0. 1.]
[0. 1. 0. 0.]]
5.独热编码
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。
例如对六个状态进行编码:
自然顺序码为 000,001,010,011,100,101
独热编码则是 000001,000010,000100,001000,010000,100000
例如,我们需要处理4维向量空间,当给一个特性向量的第n个特征进行编码时,编码器会遍历每个特征向量的第n个特征,然后进行非重复计数。如果非重复计数的值是K,那么就把这个特征转换为只有一个值是1其他值都是0的K维向量.
encoder = preprocessing.OneHotEncoder()
encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print ("\nEncoded vector =", encoded_vector)
out:
Encoded vector = [[0. 0. 1. 0. 1. 0. 0. 0. 1. 1. 0.]]
未完待续。