【机器学习】鸢尾花数据探索
# 导入必要的处理包
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
# 导入数据
filename = './data/iris.data.csv'
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(filename, names=names) # 这个数据集没有头部,手动指定即可
print(dataset.head())
sepal-length sepal-width petal-length petal-width class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
现在开始对数据进行审查,加深对数据的了解。
牵涉到如下几个维度:
- 数据的维度
- 数据自身
- 所有的数据特征
- 数据的分布情况
print(dataset.shape)
(150, 5)
# 查看数据自身
print(dataset.head(10))
sepal-length sepal-width petal-length petal-width class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
5 5.4 3.9 1.7 0.4 Iris-setosa
6 4.6 3.4 1.4 0.3 Iris-setosa
7 5.0 3.4 1.5 0.2 Iris-setosa
8 4.4 2.9 1.4 0.2 Iris-setosa
9 4.9 3.1 1.5 0.1 Iris-setosa
# 统计数据描述数据
print(dataset.describe())
sepal-length sepal-width petal-length petal-width
count 150.000000 150.000000 150.000000 150.000000
mean 5.843333 3.054000 3.758667 1.198667
std 0.828066 0.433594 1.764420 0.763161
min 4.300000 2.000000 1.000000 0.100000
25% 5.100000 2.800000 1.600000 0.300000
50% 5.800000 3.000000 4.350000 1.300000
75% 6.400000 3.300000 5.100000 1.800000
max 7.900000 4.400000 6.900000 2.500000
print(dataset.groupby('class').size())
class
Iris-setosa 50
Iris-versicolor 50
Iris-virginica 50
dtype: int64
可以看出数据的分布很均匀,如果分布不均匀,则会影响到模型的准确度。 如果不均匀,则需要对数据进行处理,使得数据达到相对均匀的状态。方法有:
- 扩大数据样本
- 数据的重新采样
- 生成人工样本
- 异常检测,变化检测
数据可视化
图表分成两大类:
- 单变量图表:理解每个特征属性
- 多变量图表:理解不同特征属性之间的关系
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
pyplot.show()
dataset.hist()
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x115f1f748>,<matplotlib.axes._subplots.AxesSubplot object at 0x1161c5400>],[<matplotlib.axes._subplots.AxesSubplot object at 0x1165a1080>,<matplotlib.axes._subplots.AxesSubplot object at 0x1165dcbe0>]],dtype=object)
# 多变量图表
scatter_matrix(dataset) # 这个工具很好用,单变量的直方图 + 变量间的散点分布图
pyplot.show()
算法评估
使用不同的算法来创建模型,并评估它们的准确度。主要有如下几个步骤:
- 分离出评估数据集
- 10折交叉评估验证算法模型
- 生成6个不同的模型来预测新数据
- 选择最优模型
# 分离数据集
array = dataset.values
X = array[:,0:4] # 输入特征,0-1-2-3
Y = array[:, 4]
validation_size = 0.2
seed = 7 # 随机数种子
X_train, X_validation, Y_train, Y_validation = train_test_split(X,Y, test_size=validation_size, random_state=seed)
X_train.shape
(120, 4)
Y_train.shape
(120,)
使用6种模型
线性算法:
- LR,线性回归
- LDA,线性判别分析
非线性算法:
- KNN,k近邻
- CART,分类与回归树
- NB,贝叶斯分类器
- SVM,支持向量机
models = {}
models['LR'] = LogisticRegression()
models['LDA'] = LinearDiscriminantAnalysis()
models['KNN'] = KNeighborsClassifier()
models['CART'] = DecisionTreeClassifier()
models['NB'] = GaussianNB()
models['SVM'] = SVC()
# 算法评估
results = []
for key in models:kfold = KFold(n_splits=10, random_state=seed)cv_results = cross_val_score(models[key], X_train, Y_train, cv=kfold, scoring='accuracy')results.append(cv_results)print('%s: %f (%f)' % (key, cv_results.mean(), cv_results.std()))
LR: 0.966667 (0.040825)
LDA: 0.975000 (0.038188)
KNN: 0.983333 (0.033333)
CART: 0.975000 (0.038188)
NB: 0.975000 (0.053359)
SVM: 0.991667 (0.025000)
# 绘图比较
fig = pyplot.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(models.keys())
pyplot.show()
# 使用评估数据集评估算法
svm = SVC()
svm.fit(X=X_train, y=Y_train)
predictions = svm.predict(X_validation)
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))
0.9333333333333333
[[ 7 0 0][ 0 10 2][ 0 0 11]]precision recall f1-score supportIris-setosa 1.00 1.00 1.00 7
Iris-versicolor 1.00 0.83 0.91 12Iris-virginica 0.85 1.00 0.92 11avg / total 0.94 0.93 0.93 30
END.
参考:
《机器学习Python实践》-- 魏贞原
【机器学习】鸢尾花数据探索相关推荐
- 机器学习实战-数据探索(变量变换、生成)
原文链接:点击打开链接 <机器学习实战-数据探索(1.变量识别:2.单变量分析:3.双变量分析)> 机器学习实战-数据探索(缺失值处理) 机器学习实战-数据探索(异常值处理) 上面三篇文章 ...
- 机器学习实战 | 数据探索(缺失值处理)
点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 接着上一篇:<机器学习实战-数据探索>介绍,机器学习更多内容可以关注github项目:mac ...
- Python机器学习之数据探索可视化库yellowbrick
背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plotly ...
- 机器学习之数据探索——数据特征分析(对比分析与统计量分析)
在数据探索工作中,作为数据特征分析的角度,对比分析.统计量分析同样是发掘数据间关系与数据特征的重要渠道. 1 对比分析 对比分析是指把两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小, ...
- 机器学习实战 | 数据探索
点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 数据的输入质量决定了输出的最后结果,数据的探索.预处理.特征选择.降维等特征工程占了项目的70%的时间. ...
- 机器学习实战 | 数据探索(变量变换、生成)
点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 变量变换 1.1.什么是变量变换? 在数据建模中,变换是指通过函数替换变量. 例如,通过平方/立方根或对 ...
- 机器学习实战——数据探索之数据泄露(Data Leakage)
1.什么是数据泄露 数据科学的中的数据泄露(Data Leakage)和其他场合涉及信息安全的数据泄漏不一样,是指一些feature不是在因果关系上顺利释预测值的'因',而是预测值的'果',存在和利用 ...
- 数据科学-通过数据探索了解我们的特征
简介 对于数据科学而言,我们要做的第一件事情,必然是了解我们的数据.而在数据探索期间,pandas和matplotlib 则是我们进行数据探索的利器.本文主要分为三个部分,第一部分是利用pandas进 ...
- 机器学习应用——无监督学习(实例:31省市居民家庭消费调查学生上网时间分布聚类鸢尾花数据人脸数据特征提取)
前言 机器学习应用博客中,将核心介绍三大类学习,即:无监督学习.监督学习.强化学习. 本篇将简要介绍: 1.无监督学习概念(最常应用场景:聚类(clustering)和降维(Dimension Red ...
最新文章
- http几个版本的区别
- Log4j、slf4j
- Bugku—web题解
- decimal double java_Java BigDecimal和double BigDecimal类
- Codeforces 374A - Inna and Pink Pony
- 【JS跨域取XML】之——借助AS的URLLoader
- android 页面跳转代码
- C/C++静态代码检查工具CodeChecker(一)简介
- 深入理解计算机系统寄存器寻址讲解
- Alpha 冲刺(1/10)
- npm安装依赖报错——npm ERR gyp verb cli的解决方法 Node Sass version 7.0.1 is incompatible with ^4.0.0. 因为在此系统上禁止运
- 天猫总裁靖捷详解新零售:传统商圈平均增长超50%
- 例说游戏角色设计与角色文化内涵的关系
- 筑底路漫漫,大豆市场人气仍需恢复
- 动态设置根节点字体大小
- 如何搭建一个网站 -- 搭建一个网站需要多少钱
- C/C++语言100题练习计划 82——加勒比海盗船(贪心算法实现)
- php做宿舍门禁管理系统项目首选公司,宿舍人脸识别门禁系统,校园宿舍管理系统...
- 利用Cesium加载 M3D BIM 模型
- python爬取微博用户信息(六)—— 完整代码
热门文章
- python 命名管道_Linux 下 Python 读取命名管道的疑惑
- python随机森林变量重要性_随机森林如何评估特征重要性【机器学习面试题详解】...
- java分布性_java大型分布系统性能优化实战教程
- 仅需6道题轻松掌握Python时间和日期处理 | Python技能树征题
- router 53 亚马逊_亚马逊53号公路
- Android ExpandableListView示例教程
- primefaces教程_Primefaces树,TreeNode,TreeTable示例教程
- python中获取文件大小_如何在Python中获取文件大小
- python中help函数_Python help()函数
- spring boot demo( 获取一个RESTful web service)