zoukankan      html  css  js  c++  java
  • [Python机器学习]鸢尾花分类 机器学习应用

    1、问题简述

      假设有一名植物学爱好者对她发现的鸢尾花的品种很感兴趣。她收集了每朵鸢尾花的一些测量数据:
    • 花瓣的长度和宽度以及花萼的长度和宽度,所有测量结果的单位都是厘米。
      她还有一些鸢尾花的测量数据,这些花之前已经被植物学专家鉴定为属于 setosa、versicolor 或 virginica 三个品种之一。对于这些测量数据,她可以确定每朵鸢尾花所属的品种。
      我们假设这位植物学爱好者在野外只会遇到这三种鸢尾花。我们的目标是构建一个机器学习模型,可以从这些已知品种的鸢尾花测量数据中进行学习,从而能够预测新鸢尾花的品种。因为我们有已知品种的鸢尾花的测量数据,所以这是一个监督学习问题。在这个问题中,我们要在多个选项中预测其中一个(鸢尾花的品种)。这是一个分类(classifification)问题的示例。可能的输出(鸢尾花的不同品种)叫作类别(class)。数据集中的每朵鸢尾花都属于三个类别之一,所以这是一个三分类问题。

    2、测试代码

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # @File  : Iris.py
     4 # @Author: 赵路仓
     5 # @Date  : 2020/2/26
     6 # @Desc  :
     7 # @Contact : 398333404@qq.com 
     8 
     9 import numpy as np
    10 import matplotlib.pyplot as plt
    11 import pandas as pd
    12 import mglearn
    13 import pandas as pd
    14 from sklearn.datasets import load_iris  # 鸢尾花(Iris)数据集,这是机器学习和统计学中一个经典的数据集
    15 from sklearn.model_selection import train_test_split
    16 
    17 iris_dataset = load_iris()  # load_iris 返回的 iris 对象是一个 Bunch 对象,与字典非常相似,里面包含键和值
    18 print("Key or iris_dataset:
    {}".format(iris_dataset.keys()))  # 打印
    19 print(iris_dataset['DESCR'][:193] + "
    ...")  # DESCR 键对应的值是数据集的简要说明。target_names 键对应的值是一个字符串数组 里面包含我们要预测的花的品种
    20 print("Target names: {}".format(iris_dataset['target_names']))  # 三种花的名字类型
    21 print("Feature names: {}".format(iris_dataset['feature_names']))  # 三种花的特征,花瓣的长度 宽度 及 花萼的长度 宽度
    22 print("Type of data: {}".format(type(iris_dataset['data'])))  # data 数组的每一行对应一朵花,列代表每朵花的四个测量数据
    23 print("Shape of data: {}".format(iris_dataset['data'].shape))  # 数组中包含 150 朵不同的花的测量数据
    24 print("First five rows of data:
    {}".format(iris_dataset['data'][:5]))  # 前五朵花的数据
    25 print("Type of target: {}".format(type(iris_dataset['target'])))  # 是一个一维数组,每朵花对应其中的一个数据
    26 print("Shape of target: {}".format(iris_dataset['target'].shape))  #
    27 print("Target:
    {}".format(iris_dataset['target']))  # 品种转为0 1 2三个整数,代表三个种类
    28 
    29 X_train, X_test, Y_train, Y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    30 print("X_train shape:{}".format(X_train.shape))
    31 print("Y_train shape:{}".format(Y_train.shape))
    32 print("X_test shape:{}".format(X_test.shape))
    33 print("Y_test shape:{}".format(Y_test.shape))
    34 
    35 # 利用X_train的数据创建DataFrame
    36 # 利用iris_dataset.feature_names的字符对数据进行标记
    37 iris_dataframe=pd.DataFrame(X_train,columns=iris_dataset.feature_names)  # 横坐标 以及横坐标名称
    38 # 利用DataFrame创建散点图矩阵,按y_trian着色
    39 grr=pd.plotting.scatter_matrix(iris_dataframe, c=Y_train, figsize=(15, 15), marker='o',hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
    40 plt.show()

      注:其中data数组的每一行代表一朵花,列代表每朵花的四个测量数据,一共150朵不同的花。而target是一个一维数组,每朵花代表其中的以个数据,用0、1、2三个整数代表三个不同的花品种。

    3、衡量是否成功:训练数据和测试数据

      首先,不能用构建模型的数据用于评估模型,因为模型是适配构建模型数据的,若用来测试匹配必定是100%。因此,要用新数据来测试模型。 

      一部分数据用于构建机器学习模型,叫作训练数据(training data)训练集(training set),这些数据用来构建机器学习模型。其余的数据用来评估模型性能,叫作测试数据(test data)测试集(testset)留出集(hold-out set)。scikit-learn 中的 train_test_split 函数可以打乱数据集并进行拆分。将 75% 的行数据及对应标签作为训练集,25% 的数据及其标签作为测试集,75%和25%可以根据情况进行更改。
      简单来说,训练数据就是构建模型的,而测试数据就是测试模型是否成功的。用X代表输入,分别为花的四项数据,用Y代表输出。
      train_test_split 函数利用伪随机数生成器将数据集打乱,利用 random_state 参数指定了随机数生成器的种子。这样函数输出就是固定不变的,所以这行代码的输出始终相同。
      该部分代码如下:
    X_train, X_test, Y_train, Y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    print("X_train shape:{}".format(X_train.shape))
    print("Y_train shape:{}".format(Y_train.shape))
    print("X_test shape:{}".format(X_test.shape))
    print("Y_test shape:{}".format(Y_test.shape))

    4、观察数据

      一种可视化方法是绘制散点图(scatter plot)。数据散点图将一个特征作为 x 轴,另一个特征作为 y 轴,将每一个数据点绘制为图上的一个点。不幸的是,计算机屏幕只有两个维度,所以我们一次只能绘制两个特征(也可能是3 个)。用这种方法难以对多于 3 个特征的数据集作图。解决这个问题的一种方法是绘制散点图矩阵(pair plot)。
      该部分代码如下:
    1 # 利用X_train的数据创建DataFrame
    2 # 利用iris_dataset.feature_names的字符对数据进行标记
    3 iris_dataframe=pd.DataFrame(X_train,columns=iris_dataset.feature_names)  # 横坐标 以及横坐标名称
    4 # 利用DataFrame创建散点图矩阵,按y_trian着色
    5 grr=pd.plotting.scatter_matrix(iris_dataframe, c=Y_train, figsize=(15, 15), marker='o',hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
    6 plt.show()

      数据显示结果:

  • 相关阅读:
    调试代码 2017-03-13
    form表单中的encType属性
    8-2、preparedStatement(预编译声明)、时间类型、大数据(保存MP3等)、批处理(针对增删改,没有查)
    子类能否重写父类的静态方法
    多态部分:Java静态绑定与动态绑定
    DBUtils使用详细示例(参考)
    平时比较常用的Exception解决方法:(随机更新)
    8-1、JDBC对象介绍(4大参数等)
    8、JDBC入门整理
    7、Java之MySQL
  • 原文地址:https://www.cnblogs.com/zlc364624/p/12369979.html
Copyright © 2011-2022 走看看