一、 加载sklearn中的数据集datasets
from sklearn import datasets
iris = datasets.load_iris() # 鸢尾花卉数据
digits = datasets.load_digits() # 手写数字8x8像素信息数据
- 查看数据的信息
print iris.data[:4] # 查看数据的特征信息
print iris.data.shape # 查看数据的特征信息维度
print iris.target_names # 查看标签对应的文本
print iris.target[:4] # 查看数据的标签 setosa:0 ...
[[ 5.1 3.5 1.4 0.2]
[ 4.9 3. 1.4 0.2]
[ 4.7 3.2 1.3 0.2]
[ 4.6 3.1 1.5 0.2]]
(150L, 4L)
['setosa' 'versicolor' 'virginica']
[0 0 0 0]
print digits.data.shape
print digits.target[0]
print digits.data[0].reshape((8,8)) # 重塑成8x8的像素数组
(1797L, 64L)
0
[[ 0. 0. 5. 13. 9. 1. 0. 0.]
[ 0. 0. 13. 15. 10. 15. 5. 0.]
[ 0. 3. 15. 2. 0. 11. 8. 0.]
[ 0. 4. 12. 0. 0. 8. 8. 0.]
[ 0. 5. 8. 0. 0. 9. 8. 0.]
[ 0. 4. 11. 0. 1. 12. 7. 0.]
[ 0. 2. 14. 5. 10. 12. 0. 0.]
[ 0. 0. 6. 13. 10. 0. 0. 0.]]
二、训练集和分割集的分割
from sklearn.model_selection import train_test_split
X = digits.data # 特征矩阵
y = digits.target # 标签向量
# 随机分割训练集和测试集:
# test_size:设置测试集的比例。random_state:可理解为种子,保证随机唯一
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3., random_state=8)
print X_train.shape
print X_test.shape
(1198L, 64L)
(599L, 64L)
三、数据预处理
1. 缺失值处理
from sklearn.preprocessing import Imputer
x = np.array([[ 1, 2 , 0],
[0, np.NaN,0],
[0, 0, 1]]);
imputer = Imputer(missing_values='NaN',strategy='mean',axis=0,copy=False)
imputer.fit_transform(x[:,1])
array([[ 1., 2., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
2. 特征值的归一化
归一化的好处:
当特征的数值范围差距较大时,需要对特征的数值进行标准化,防止某些特征的权重过大,让每个特征的地位相对平等,对结果做出的贡献相同。一般对连续性特征值处理。
提升模型的收敛速度(梯度下降)。
from sklearn import preprocessing
import numpy as np
X = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
# 对每一列特征的数值归一化(均值为0,方差为1)
print preprocessing.scale(X)
array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
使用StandardScaler对象进行归一化
StandardScaler对象可以保存训练集中的参数(均值、方差),之后可以直接使用其对象转换测试集数据。
from sklearn.preprocessing import StandardScaler # 对数据标准