开始学习机器学习基础,在此留下学习心得与自己的理解。
啥也不说,先看一下鸢尾花啥样
好看吧~~~~
1.环境搭建
python版本最好是3.6.x及以上,我这里用的是3.7.1版本
安装有机器学习库sklearn、numpy,若没有用pip安装
pip install sklearn
pip install numpy
用到的库和包
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
2.了解数据
2.1读取数据
首先,我们使用load_iris函数调用存储在scikit-learn的datasets模块中的Iris数据集。
运行代码如下:
from sklearn.datasets import load_iris
iris_data=load_iris()
- 其中,load_iris返回的是一个Bunch对象,与字典相似,里面也包键和值
- 从网站api上面爬取数据有一部分数据返回的也是Bunch对象
2.2查看数据
首先,我们先来看一下,这个数据集里面有多少个键,好为接下来处理数据做准备。
运行代码如下:
from sklearn.datasets import load_iris
iris_data =load_iris()
print(iris_data.keys())
输出结果:
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
可以看见有六个键,我们其实可以通过名字就能猜到每个键对应的值是什么。好比‘feature_names’一看就知道是特点的名字,也就是特征呗。所以有时候不需要我们每一个键都运行查看一下。
接下来,既然是学习,那么还是让我们看一下每一个键分别存储了哪些值吧
运行代码如下:
from sklearn.datasets import load_iris
iris_dataset =load_iris()
print(iris_dataset['data']\n)
print(iris_dataset['target']\n)
print(iris_dataset['target_names']\n)
print(iris_dataset['DESCR']\n)
print(iris_dataset['feature_names']\n)
print(iris_dataset['filename'])
输出如下:
[[5.1 3.5 1.4 0.2]
.
.
.
[6.2 3.4 5.4 2.3]
[5.9 3. 5.1 1.8]]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
['setosa' 'versicolor' 'virginica']
DESCR的键对应的值是数据集的简要说明(这里就不显示了,太多了)
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
D:\Python37\lib\site-packages\sklearn\datasets\data\iris.csv
从输出的数据,我们可以看出:
- data里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为NumPy数组
- target数组包含的是测量过的每朵花的品种,品种被转换为0到2的整数,格式为NumPy数组
- target_names键对应的值是一个字符串数组,里面包含我们要预测的花种
- DESCR键对应的值是数据集的简要说明
- feature_names键对应的值是一个字符串列表,对应一个特征进行了说明
- filename键对应的值是数据集的存储位置
3.分离数据
我们想要利用这些数据构建一个机器学习的模型,但是我们不能将用于构建模型的数据用于评估模型,无法告诉我们模型的泛化能力如何(也就是说,在新数据上能否正确预测)
我们将收集好的带标签的数据分成两部分,一部分用于构建机器学习模型,叫训练数据、训练集;另一部分用于评估模型性能,叫测试数据、测试集或留出集.。
在这里,用scikit-learn的model_selection模块的train_test_split函数打乱数据集并进行拆分。
这个函数将75%的行数据及对应标签作为训练集,剩下25%的数据及其标签作为测试集。
- scikit-learn中的数据通常用大写X表示,标签用小写y表示。
- 这里受到数学标准公式启发,其中x是函数的输入,y是函数的输出。
- 我们用大写的X是因为数据是一个二维矩阵,用小写y是因为目标是一维向量,这是数学中的约定
运行代码如下:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris_dataset =load_iris()
X_train,X_test,y_train,y_test=train_test_split(iris_dataset['data'],
iris_dataset['target'],random_state=0)
其中,传入参数random_state指定了随机数生成器的种子。作用是每次运行这行代码,随机挑选出来的数据不再发生改变
4.构建模型(k临近算法)
scikit-learn中有许多可用的分类算法,这里我们用的是k临近分类器。
- 原理:要对一个新的数据点做出判断,算法会在训练集中寻找与这个新的数据点距离最近的数据点,然后将找到的数据点的标签赋给这个新的数据点.
- k的含义:我们可以考虑训练集中与新数据点最近的任意k个邻居,而不是只考虑最近的那一个。
运行代码入下:
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier(n_neighbors=1)#这里我们设置邻居的数目为1
knn对象对算法进行了封装,即包括用训练数据构建模型的算法,也包括对新数据点进行预测的算法。
想要基于训练集来构建模型,需要调用knn对象的fit()方法,传入参数为X_train和y_train,二者都是NumPy数组,前者为训练集,后者为训练集相对应的训练标签。
运行代码如下:
knn.fit(X_train,y_train)#构建模型
5.评估模型(计算测试集精度)
这里我们要用到之前分离的测试集。我们可以通过计算精度来和衡量模型的优劣。
- 这里的精度指的是品种预测正确的的花所占的比例。
5.1方法一
我们先对测试数据中的每朵花进行预测,再将预测结果与标签(已知品种)进行对比。
运行代码如下:
import numpy as np
y_pred=knn.predict(X_test)
score = np.mean(y_pred==y_test)
print("{:.2f}".format(score))
输出:
0.97
5.2方法二
直接用knn对象的score方法来计算测试集的精度。运行代码如下:
score=knn.score(X_test,y_test)
print("{:.2f}".format(score))
输出:
0.97
- 完整代码在配套资源里面
- 有不懂得地方和问题请留言
- 大家可以收藏一下以后学习可能用得到
今天的文章最新版学习笔记—Python机器学习基础教程(1)Irises(鸢尾花)分类—附完整代码分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89010.html