1、问题简述

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

2、测试代码

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : Iris.py
# @Author: 赵路仓
# @Date : 2020/2/26
# @Desc :
# @Contact : 398333404@qq.com import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mglearn
import pandas as pd
from sklearn.datasets import load_iris # 鸢尾花(Iris)数据集,这是机器学习和统计学中一个经典的数据集
from sklearn.model_selection import train_test_split iris_dataset = load_iris() # load_iris 返回的 iris 对象是一个 Bunch 对象,与字典非常相似,里面包含键和值
print("Key or iris_dataset:\n{}".format(iris_dataset.keys())) # 打印
print(iris_dataset['DESCR'][:193] + "\n...") # DESCR 键对应的值是数据集的简要说明。target_names 键对应的值是一个字符串数组 里面包含我们要预测的花的品种
print("Target names: {}".format(iris_dataset['target_names'])) # 三种花的名字类型
print("Feature names: {}".format(iris_dataset['feature_names'])) # 三种花的特征,花瓣的长度 宽度 及 花萼的长度 宽度
print("Type of data: {}".format(type(iris_dataset['data']))) # data 数组的每一行对应一朵花,列代表每朵花的四个测量数据
print("Shape of data: {}".format(iris_dataset['data'].shape)) # 数组中包含 150 朵不同的花的测量数据
print("First five rows of data:\n{}".format(iris_dataset['data'][:5])) # 前五朵花的数据
print("Type of target: {}".format(type(iris_dataset['target']))) # 是一个一维数组,每朵花对应其中的一个数据
print("Shape of target: {}".format(iris_dataset['target'].shape)) #
print("Target:\n{}".format(iris_dataset['target'])) # 品种转为0 1 2三个整数,代表三个种类 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)) # 利用X_train的数据创建DataFrame
# 利用iris_dataset.feature_names的字符对数据进行标记
iris_dataframe=pd.DataFrame(X_train,columns=iris_dataset.feature_names) # 横坐标 以及横坐标名称
# 利用DataFrame创建散点图矩阵,按y_trian着色
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)
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)。
  该部分代码如下:
 # 利用X_train的数据创建DataFrame
# 利用iris_dataset.feature_names的字符对数据进行标记
iris_dataframe=pd.DataFrame(X_train,columns=iris_dataset.feature_names) # 横坐标 以及横坐标名称
# 利用DataFrame创建散点图矩阵,按y_trian着色
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)
plt.show()

  数据显示结果:

[Python机器学习]鸢尾花分类 机器学习应用的更多相关文章

  1. [Python]基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案

    看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理 ...

  2. Python数据预处理:机器学习、人工智能通用技术(1)

    Python数据预处理:机器学习.人工智能通用技术 白宁超  2018年12月24日17:28:26 摘要:大数据技术与我们日常生活越来越紧密,要做大数据,首要解决数据问题.原始数据存在大量不完整.不 ...

  3. 探索 Python、机器学习和 NLTK 库 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类

    挑战:使用机器学习对 RSS 提要进行分类 最近,我接到一项任务,要求为客户创建一个 RSS 提要分类子系统.目标是读取几十个甚至几百个 RSS 提要,将它们的许多文章自动分类到几十个预定义的主题领域 ...

  4. 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)

    小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码) Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用P ...

  5. 什么是机器学习的分类算法?【K-近邻算法(KNN)、交叉验证、朴素贝叶斯算法、决策树、随机森林】

    1.K-近邻算法(KNN) 1.1 定义 (KNN,K-NearestNeighbor) 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类 ...

  6. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  7. Python实现鸢尾花数据集分类问题——基于skearn的NaiveBayes

    Python实现鸢尾花数据集分类问题——基于skearn的NaiveBayes 代码如下: # !/usr/bin/env python # encoding: utf-8 __author__ = ...

  8. Python实现鸢尾花数据集分类问题——基于skearn的LogisticRegression

    Python实现鸢尾花数据集分类问题——基于skearn的LogisticRegression 一. 逻辑回归 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题, ...

  9. Python实现鸢尾花数据集分类问题——基于skearn的SVM

    Python实现鸢尾花数据集分类问题——基于skearn的SVM 代码如下: # !/usr/bin/env python # encoding: utf-8 __author__ = 'Xiaoli ...

随机推荐

  1. oracle的锁种类知识普及

    锁概念基础 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加 ...

  2. 第一篇:Vue基础

    Vue基础 渐进式JavaScript框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 走进Vue 什么是Vue 渐进式JavaScrip ...

  3. 练习2-14 求奇数分之一序列前N项和 (15 分)

    练习2-14 求奇数分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在一行 ...

  4. WeChall_ Training: Stegano I (Training, Stegano)

    This is the most basic image stegano I can think of. 解题: 一张小图片,文本方式打开.

  5. Go语言实现:【剑指offer】旋转数组的最小数字

    该题目来源于牛客网<剑指offer>专题. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3, ...

  6. landsat8波段叠加(layer stacking)

    许久没更.最近一直在看IDL,忽略了gdal的学习. 今天做了landsat8的辐射定标,需要通过reflectance gains/bias来进行波段运算.由于landsat8 oli未提供一个完整 ...

  7. Spring Cloud(七):服务网关zuul过滤器

    上文介绍了Zuul的基本使用与路由功能,本文接着介绍Zuul的核心概念 -- Zuul过滤器(filter). Zuul的功能基本通过Zuul过滤器来实现(类比于Struts的拦截器,只是Struts ...

  8. Nginx之美多商城前台部署

    这里我们采用动静分离的方式来部署美多商城项目. 动态请求:采用uwsgi与Django进行通信处理动态业务. 静态请求:采用Ngins通过socket与uwsgi进行通信处理静态业务. 第一步:实现u ...

  9. 《Head first设计模式》之适配器模式

    适配器模式将一个类的接口,转换成客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 我们周围的适配器 如果你需要在欧洲国家使用美国制造的笔记本电脑,你可能需要使用一个交流电的适配器. 你知 ...

  10. javascript 集合 Object Array Map Set

    //Object //创建 var obj = {} function obj(){} class obj{} //Array api Array属性和方法: for 条件判断: break cont ...