飞道的博客

机器学习案例——鸢尾花数据集分析

406人阅读  评论(0)

    前几天把python基础知识过了一遍,拿了这个小例子作为练手项目,这个案例也有师兄的帮助,记录完,发现代码贴的很多,文章有点长,为了节省篇幅,有一些说明就去掉了,毕竟鸢尾花数据集比较经典,网上能找到很多和我差不多的案例。还有就是发现一个新的markdown排版工具,今天想试试效果。

数据来源

    首先说一下,该数据集来源于网络。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。数据来源:http://archive.ics.uci.edu/ml/datasets/Iris

    先搜了一下,什么是花瓣和花萼,小小科普。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MiqxQnQ6-1601307500587)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/花瓣花萼.png)]

数据简单处理

import pandas as pd

# 读入数据
df = pd.read_csv('iris/iris.csv')

'''
数据时以逗号为分隔符的,
但是这个数据没有列的名字,
所以先给每个列取个名字,
直接使用数据说明中的描述
'''
df.columns = ['sepal_len', 'sepal_width', 'petal_len', 'petal_width', 'class']

# 查看前5条数据
df.head()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5K45l0Q-1601307500592)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/数据前5行.png)]

'''
最后类别一列,感觉前面的'Iris-'有点多余
即把class这一列的数据按'-'进行切分
取切分后的第二个数据,为了好看一点点
'''
df['class'] = df['class'].apply(lambda x: x.split('-')[1]) 

# 查看数据信息
df.describe()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpZ6MoBL-1601307500594)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/数据描述.png)]

    使用describe()可以很方便的查看数据的大致信息,可以看到数据是没有缺失值的,总共有145条,每一列的最大值、最小值、平均值都可以查看。

数据可视化

    为了比较直观的查看数据的分布,用matplotlib进行了简单的可视化展示,查看数据的分布,画个图。

import numpy as np

import matplotlib.pyplot as plt
import matplotlib.cm as cm
%matplotlib inline

def scatter_plot_by_category(feat, x, y):
    alpha = 0.5
    gs = df.groupby(feat)
    cs = cm.rainbow(np.linspace(0, 1, len(gs)))
    for g, c in zip(gs, cs):
        plt.scatter(g[1][x], g[1][y], color=c, alpha=alpha)

plt.figure(figsize=(20,5))

plt.subplot(131)
scatter_plot_by_category('class', 'sepal_len', 'petal_len')
plt.xlabel('sepal_len')
plt.ylabel('petal_len')
plt.title('class')

# 为了节省篇幅,省了第二、三个图的代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfob0y8d-1601307500596)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/散点图.png)]

import seaborn as sb

plt.figure(figsize=(20, 10))
for column_index, column in enumerate(df.columns):
    if column == 'class':
        continue
    plt.subplot(2, 2, column_index + 1)
    sb.violinplot(x='class', y=column, data=df)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDu1vkwM-1601307500597)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/花花.png)]

模型训练

    因为鸢尾花数据集很简单,特征已经全部提取好了,而且也很纯,所以就直接放到机器学习算法里面训练了。这里使用的是决策树分类算法。

# 首先对数据进行切分,即分出数据集和测试集
from sklearn.cross_validation import train_test_split

all_inputs = df[['sepal_len', 'sepal_width',
                             'petal_len', 'petal_width']].values
all_classes = df['class'].values

(X_train,
 X_test,
 X_train,
 Y_test) = train_test_split(all_inputs, all_classes, train_size=0.8, random_state=1)
 

# 使用决策树算法进行训练
from sklearn.tree import DecisionTreeClassifier

# 定义一个决策树对象
decision_tree_classifier = DecisionTreeClassifier()

# 训练模型
model = decision_tree_classifier.fit(training_inputs, training_classes)

# 所得模型的准确性
print(decision_tree_classifier.score(testing_inputs, testing_classes))

# 使用训练的模型进行预测,为了偷懒,
# 直接把测试集里面的数据拿出来了三条
print(X_test[0:3])
print(Y_test[0:3])
model.predict(X_test[0:3])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YELyroAm-1601307500598)(https://github.com/mengxiaoxu/mengxiaoxu.github.io/raw/master/_posts/images/机器学习/预测.png)]

    可以看到效果还是不错,在测试集上的准确率达到了97%。网上还有人提供了一个可视化工具Graph Visualization(http://www.graphviz.org/),可以利用它把构建的决策树模型直观的展示出来,这里不展示了,代码贴太多了,文章太长了。

写在最后

    推荐一个课程,是吴恩达在网易云课堂开设的微专业——深度学习工程师课程,我学了几天了,讲的比较清晰,而且是免费的,现在我已经学完第二周的课时了,后面打算把自己的学习笔记也发出来一起交流。
课程地址:http://mooc.study.163.com/smartSpec/detail/1001319001.htm

推荐阅读:

一个诗意的女孩——西凉忆

python小结,再谈谈对学习的理解

从具体案例了解知识图谱构建流程

个人微信:Guanngxu


转载:https://blog.csdn.net/heuguangxu/article/details/80426437
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场