使用经典的鸢尾花案例,来梳理一下机器学习的流程。
类别3个:
Setosa、Versicolour、Virginica
样本数量:150个(每类50个)
a. scikit-learn 加载:sklearn.datasets.load_iris()
b. 下载导入:先下载,再读取。(下载位置)
这里就直接用 sklearn.datasets 加载鸢尾花数据集了。
from sklearn.datasets import load_iris
iris = load_iris()
我们可以查看一下 iris 数据:
特征值:
iris.data
截取前五行展示,因为 iris.data.shape
为 (150, 4) ,共150行显示不完。
目标值:
iris.target
随机的将数据集划分成训练集和测试集。
借助API划分 :sklearn.model_selection.train_test_split
from sklearn.model_selection import train_test_split
把特征值数据和目标值数据作为参数传递进 train_test_split()
,将返回:训练集特征值、测试集特征值、训练集目标值、测试集目标值
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target)
虽然数据里的几个特征单位都是 cm,但是数值大小在 0-10 范围内。为了便于计算,我们对数据进行标准化处理,使数据转换到均值为 0、标准差为 1 的范围内。
标准化 API:sklearn.preprocessing.StandardScaler
from sklearn.preprocessing import StandardScaler
实例化一个转换器类。
transfer = StandardScaler()
计算参数(平均值、标准差)和转换数据:对训练集特征值和测试集特征值标准化处理。
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
部分原始数据 | 标准化处理后 |
---|---|
使用 k 近邻算法 (KNN) 对训练数据进行训练,并对鸢尾花类别进行预测。
相关API:sklearn.neighbors.KNeighborsClassifier
首先导入相关模块:
from sklearn.neighbors import KNeighborsClassifier
实例化一个预估计器类 (这里直接使用默认的参数了,n_neighbors=5, weights=‘uniform’, algorithm=‘auto’)
(邻居数:5;邻域所有点的权重:均匀相等;用于计算最近邻居的算法:自动选择)
estimator = KNeighborsClassifier()
训练特征值和目标值
estimator.fit(x_train, y_train)
评价一个模型怎么样,容易想到的就是,比较一下模型预测的结果和实际结果是否相等。
predict = estimator.predict(x_test)
print(predict == y_test)
estimator.score(x_test, y_test)
本次运行得到的结果为:0.9736842105263158。
由于划分数据集是随机的,且样本的数量只有150个,所以如果多次运行结果会不一样。
本次案例主要目的是梳理基本实现流程,有兴趣的可以使用其他数据集或算法,补充加强对数据处理、模型的调优等具体流程。