[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 : [email protected]
 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:\n{}".format(iris_dataset.keys()))  # 打印
19 print(iris_dataset[‘DESCR‘][:193] + "\n...")  # 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:\n{}".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:\n{}".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()

  数据显示结果:

原文地址:https://www.cnblogs.com/zlc364624/p/12369979.html

时间: 2024-11-08 02:48:40

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

机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树

摘要: Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),本文介绍了CART用于离散标签分类决策和连续特征回归时的原理.决策树创建过程分析了信息混乱度度量Gini指数.连续和离散特征的特殊处理.连续和离散特征共存时函数的特殊处理和后剪枝:用于回归时则介绍了回归树和模型树的原理.适用场景和创建过程.个人认为,回归树和模型树

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

看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理解和工程实践能力的提升,也不利于Python初学者实现该模型. 本博文的特点: 一 全面性地总结K-NN模型的特征.用途 二  基于Python的内置模块,不调用任何第三方库实现 博文主要分为三部分: 基本模型(便于理清概念.回顾模型) 对待解决问题的重述 模型(算法)和评价(一来,以便了解模型特点

文本分类——机器学习常用工具

文本分类现已比较成熟,各类开源工具不少,现推荐几个比较常用简单的工具: 1.scikit-learn:http://scikit-learn.org/stable/index.html python编写调用,里面有各种分类算法svm.随机森林.贝叶斯等,和特征提取,如字.ngram等,几行代码便可以构建一个分类任务. 2.WEKA:http://www.cs.waikato.ac.nz/ml/index.html 具有图形界面,但是感觉速度有点慢 3.libsvm :http://www.csi

Python机器学习:6本机器学习书籍推荐

机器学习是实现人工智能的一种途径,它和数据开掘有一定的相似性,也是一门多领域交叉学科,触及概率论.核算学.逼近论.凸剖析.核算复杂性理论等多门学科.对比于数据开掘从大数据之间找互相特性而言,机器学习愈加注重算法的设计,让核算机可以白动地从数据中“学习”规则,并利用规则对不知道数据进行猜测.因为学习算法触及了很多的核算学理论,与核算揣度联络尤为严密. 今天为大家推荐有关机器学习的书籍: 1.<Python机器学习实践指南> Python机器学习实践指南 书籍介绍: 机器学习是近年来渐趋热门的一个

Python是人工智能和机器学习的最佳编程语言,证据在此!

人工智能与机器学习是IT行业的新兴热门领域.虽然有关其发展安全性的讨论日益增多,但开发人员仍在不断扩展人工智能的能力与存储容量.如今,人工智能已远远地超出科幻小说中的构想,成为了现实.人工智能技术广泛应用于处理分析大量数据,由于其处理的工作量及工作强度明显提高,因此这些工作今后无需人工操作. 例如,人工智能被应用于分析学中以建立预测,帮助人们创建有力策略和更为有效的解决办法.金融科技公司将人工智能应用于投资平台中,进行市场调查并预测如何实现投资收益最大化.旅游业使用人工智能发送个性化建议,或是开

机器学习——非均衡分类问题

在机器学习的分类问题中,我们都假设所有类别的分类代价是一样的.但是事实上,不同分类的代价是不一样的,比如我们通过一个用于检测患病的系统来检测马匹是否能继续存活,如果我们把能存活的马匹检测成患病,那么这匹马可能就会被执行安乐死:如果我们把不能存活的马匹检测成健康,那么就会继续喂养这匹马.一个代价是错杀一只昂贵的动物,一个代价是继续喂养,很明显这两个代价是不一样的.

使用 Python 开始你的机器学习之旅【转】

转自:https://linux.cn/article-8582-1.html 编译自:https://opensource.com/article/17/5/python-machine-learning-introduction 作者: Michael J. Garbade 原创:LCTT https://linux.cn/article-8582-1.html 译者: ucasFL 本文地址:https://linux.cn/article-8582-1.html 2017-06-07 0

机器学习中分类与聚类的本质区别

机器学习中分类与聚类的本质区别 机器学习中有两类的大问题,一个是分类,一个是聚类. 在我们的生活中,我们常常没有过多的去区分这两个概念,觉得聚类就是分类,分类也差不多就是聚类,下面,我们就具体来研究下分类与聚类之间在数据挖掘中本质的区别. 分类 分类有如下几种说法,但表达的意思是相同的. 分类(classification):分类任务就是通过学习得到一个目标函数f,把每个属性集x映射到一个预先定义的类标号y中. 分类是根据一些给定的已知类别标号的样本,训练某种学习机器(即得到某种目标函数),使它

Python大数据与机器学习之NumPy初体验

本文是Python大数据与机器学习系列文章中的第6篇,将介绍学习Python大数据与机器学习所必须的NumPy库. 通过本文系列文章您将能够学到的知识如下: 应用Python进行大数据与机器学习 应用Spark进行大数据分析 实现机器学习算法 学习使用NumPy库处理数值数据 学习使用Pandas库进行数据分析 学习使用Matplotlib库进行Python绘图 学习使用Seaborn库进行统计绘图 使用Plotly库进行动态可视化 使用SciKit-learn处理机器学习任务 K-Means聚