本实验介绍了使用Python进行机器学习的一些基本概念。 在本案例中,将使用K-Nearest Neighbor(KNN)算法对鸢尾花的种类进行分类,并测量花的特征。
本案例目的:

  1. 遵循并理解完整的机器学习过程
  2. 对机器学习原理和相关术语有基本的了解。
  3. 了解评估机器学习模型的基本过程。

    1 案例:鸢尾花种类预测

    Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。关于数据集的具体介绍:鸢尾花数据集使用.png

    2 scikit-learn中数据集介绍

    2.1 scikit-learn数据集API介绍

  • sklearn.datasets

    • 加载获取流行数据集
    • datasets.load_*()
      • 获取小规模数据集,数据包含在datasets里
    • datasets.fetch_*(data_home=None)
      • 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

        2.1.1 sklearn小数据集

  • sklearn.datasets.load_iris()

加载并返回鸢尾花数据集鸢尾花数据集.png

2.1.2 sklearn大数据集

  • sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)

    • subset:’train’或者’test’,’all’,可选,选择要加载的数据集。
    • 训练集的“训练”,测试集的“测试”,两者的“全部”

      2.2 sklearn数据集返回值介绍

  • load和fetch返回的数据类型datasets.base.Bunch(字典格式)

    • data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
    • target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
    • DESCR:数据描述
    • feature_names:特征名,新闻数据,手写数字、回归数据集没有
    • target_names:标签名
      1. from sklearn.datasets import load_iris
      2. # 获取鸢尾花数据集
      3. iris = load_iris()
      4. print("鸢尾花数据集的返回值:\n", iris)
      5. # 返回值是一个继承自字典的Bench
      6. print("鸢尾花的特征值:\n", iris["data"])
      7. print("鸢尾花的目标值:\n", iris.target)
      8. print("鸢尾花特征的名字:\n", iris.feature_names)
      9. print("鸢尾花目标值的名字:\n", iris.target_names)
      10. print("鸢尾花的描述:\n", iris.DESCR)

      2.3 查看数据分布

      通过创建一些图,以查看不同类别是如何通过特征来区分的。 在理想情况下,标签类将由一个或多个特征对完美分隔。 在现实世界中,这种理想情况很少会发生。
  • seaborn介绍

    • Seaborn 是基于 Matplotlib 核心库进行了更高级的 API 封装,可以让你轻松地画出更漂亮的图形。而 Seaborn 的漂亮主要体现在配色更加舒服、以及图形元素的样式更加细腻。
    • 安装 pip3 install seaborn
    • seaborn.lmplot() 是一个非常有用的方法,它会在绘制二维散点图时,自动完成回归拟合
      • sns.lmplot() 里的 x, y 分别代表横纵坐标的列名,
      • data= 是关联到数据集,
      • hue=*代表按照 species即花的类别分类显示,
      • fit_reg=是否进行线性拟合。
    • 参考链接: api链接 ```python %matplotlib inline

      内嵌绘图

      import seaborn as sns import matplotlib.pyplot as plt import pandas as pd

把数据转换成dataframe的格式

iris_d = pd.DataFrame(iris[‘data’], columns = [‘Sepal_Length’, ‘Sepal_Width’, ‘Petal_Length’, ‘Petal_Width’]) iris_d[‘Species’] = iris.target

def plot_iris(iris, col1, col2): sns.lmplot(x = col1, y = col2, data = iris, hue = “Species”, fit_reg = False) plt.xlabel(col1) plt.ylabel(col2) plt.title(‘鸢尾花种类分布图’) plt.show() plot_iris(iris_d, ‘Petal_Width’, ‘Sepal_Length’)

  1. ![鸢尾花数据分类展示.png](https://cdn.nlark.com/yuque/0/2022/png/21879589/1655979917293-bdca496c-d0c4-4caa-baba-9ab064c5c9ff.png#clientId=uf7796139-5e03-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u47ed2367&margin=%5Bobject%20Object%5D&name=%E9%B8%A2%E5%B0%BE%E8%8A%B1%E6%95%B0%E6%8D%AE%E5%88%86%E7%B1%BB%E5%B1%95%E7%A4%BA.png&originHeight=794&originWidth=1458&originalType=binary&ratio=1&rotation=0&showTitle=false&size=144740&status=done&style=none&taskId=u5c59718c-7a71-475d-bba3-1d8cb6f022b&title=)
  2. <a name="bM23l"></a>
  3. ### 2.4 数据集的划分
  4. 机器学习一般的数据集会划分为两个部分:
  5. - 训练数据:用于训练,**构建模型**
  6. - 测试数据:在模型检验时使用,用于**评估模型是否有效**
  7. 划分比例:
  8. - 训练集:70% 80% 75%
  9. - 测试集:30% 20% 25%
  10. **数据集划分api**
  11. - sklearn.model_selection.train_test_split(arrays, *options)
  12. - x 数据集的特征值
  13. - y 数据集的标签值
  14. - test_size 测试集的大小,一般为float
  15. - random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
  16. - return 测试集特征训练集特征值值,训练标签,测试标签(默认随机取)
  17. ```python
  18. from sklearn.datasets import load_iris
  19. from sklearn.model_selection import train_test_split
  20. # 1、获取鸢尾花数据集
  21. iris = load_iris()
  22. # 对鸢尾花数据集进行分割
  23. # 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test
  24. x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
  25. print("x_train:\n", x_train.shape)
  26. # 随机数种子
  27. x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
  28. x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
  29. print("如果随机数种子不一致:\n", x_train == x_train1)
  30. print("如果随机数种子一致:\n", x_train1 == x_train2)