iris鸢尾花数据集最全数据分析

article/2025/11/10 22:36:42


写在前面

在写这篇文章之前,首先安利下jupyter,简直是神作,既可以用来写文章,又可以用来写代码,文章和代码并存,简直就是写代码/文章/教程的利器。


安装很简单:pip install jupyter

使用很简单: 当前面目录下shift+右键呼出在此处打开命令窗口,输入jupyter notebook召唤神龙。

上面这段文字在jupyter中是这样的(markdown格式):

本文介绍

基于iris数据集进行数据分析。

iris数据集是常用的分类实验数据集,由Fisher,1936收集整理。iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。(来自百度百科)

数据预处理

首先使用padas相关的库进行数据读取,处理和预分析。

pandas的可视化user guide参见:

https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html

首先读取信息,并查看数据的基本信息:可以看到数据的字段,数量,数据类型和大小。

 

%matplotlib notebookimport pandas as pdimport matplotlib.pyplot as plt# 读取数据iris = pd.read_csv('iris.data.csv')

iris.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
Sepal.Length    150 non-null float64
Sepal.Width     150 non-null float64
Petal.Length    150 non-null float64
Petal.Width     150 non-null float64
type            150 non-null object
dtypes: float64(4), object(1)
memory usage: 5.9+ KB
 

# 前5个数据iris.head()

Sepal.LengthSepal.WidthPetal.LengthPetal.Widthtype
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa

 

# 数据描述iris.describe()

Sepal.LengthSepal.WidthPetal.LengthPetal.Width
count150.000000150.000000150.000000150.000000
mean5.8433333.0540003.7586671.198667
std0.8280660.4335941.7644200.763161
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000

箱线图描述了数据的分布情况,包括:上下界,上下四分位数和中位数,可以简单的查看数据的分布情况。
比如:上下四分位数相隔较远的话,一般可以很容易分为2类。
在《深入浅出统计分析》一书中,一个平均年龄17岁的游泳班,可能是父母带着婴儿的早教班,这种情况在箱线图上就能够清楚的反映出来。

 

# 箱线图iris.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)

Sepal.Length       AxesSubplot(0.125,0.536818;0.352273x0.343182)
Sepal.Width     AxesSubplot(0.547727,0.536818;0.352273x0.343182)
Petal.Length          AxesSubplot(0.125,0.125;0.352273x0.343182)
Petal.Width        AxesSubplot(0.547727,0.125;0.352273x0.343182)
dtype: object
 

#直方图,反馈的是数据的频度,一般常见的是高斯分布(正态分布)。iris.hist()

array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000001418E7B8>,<matplotlib.axes._subplots.AxesSubplot object at 0x00000000141C3208>],[<matplotlib.axes._subplots.AxesSubplot object at 0x00000000141EB470>,<matplotlib.axes._subplots.AxesSubplot object at 0x00000000142146D8>]],dtype=object)
 

# plot直接展示数据的分布情况,kde核密度估计对比直方图来看iris.plot()

iris.plot(kind = 'kde')

<matplotlib.axes._subplots.AxesSubplot at 0x14395518>

径向可视化是多维数据降维的可视化方法,不管是数据分析还是机器学习,降维是最基础的方法之一,通过降维,可以有效的减少复杂度。

径向坐标可视化是基于弹簧张力最小化算法。

它把数据集的特征映射成二维目标空间单位圆中的一个点,点的位置由系在点上的特征决定。把实例投入圆的中心,特征会朝圆中此实例位置(实例对应的归一化数值)“拉”实例。

 

ax = pd.plotting.radviz(iris, 'type', colormap = 'brg')# radviz的源码中Circle未设置edgecolor,画圆需要自己处理ax.add_artist(plt.Circle((0,0), 1, color='r', fill = False))

<matplotlib.patches.Circle at 0x1e68ba58>
 

# Andrews曲线将每个样本的属性值转化为傅里叶序列的系数来创建曲线。# 通过将每一类曲线标成不同颜色可以可视化聚类数据,# 属于相同类别的样本的曲线通常更加接近并构成了更大的结构。pd.plotting.andrews_curves(iris, 'type', colormap='brg')

<matplotlib.axes._subplots.AxesSubplot at 0x1e68b978>

 

# 平行坐标可以看到数据中的类别以及从视觉上估计其他的统计量。# 使用平行坐标时,每个点用线段联接,每个垂直的线代表一个属性,# 一组联接的线段表示一个数据点。可能是一类的数据点会更加接近。pd.plotting.parallel_coordinates(iris, 'type', colormap = 'brg')

<matplotlib.axes._subplots.AxesSubplot at 0x1e931160>

 

# scatter matrixcolors = {'Iris-setosa': 'blue', 'Iris-versicolor': 'green', 'Iris-virginica': 'red'}

pd.plotting.scatter_matrix(iris, color = [colors[type] for type in iris['type']])

array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EB1B6A0>,<matplotlib.axes._subplots.AxesSubplot object at 0x0000000014349860>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001C67D550>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001434D198>],[<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EB3C6A0>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EB6BC18>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EB9C198>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EBC3748>],[<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EBC3780>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EE0C240>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EE357B8>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EE5CD30>],[<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EE8E2E8>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EEB4860>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EEDCDD8>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000001EF0D390>]],dtype=object)

 

# 相关系数的热力图import seaborn as sea

sea.heatmap(iris.corr(), annot=True, cmap='GnBu', linewidths=1, linecolor='k',square=True)

<matplotlib.axes._subplots.AxesSubplot at 0x1f56ce10>

 

# pandas_profiling这个库可以对数据集进行初步预览,并进行报告,很不错,安装方式 pip install pandas_profiling# 运行略# import pandas_profiling as pp# pp.ProfileReport(iris)

 

# 数据分类import sklearn as skfrom sklearn import preprocessingfrom sklearn import model_selection

 

# 预处理X = iris[['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width']]y = iris['type']encoder = preprocessing.LabelEncoder()y = encoder.fit_transform(y)

print(y)

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2]
 

from sklearn import metricsdef model_fit_show(model, model_name, X, y, test_size = 0.3, cluster = False):

train_X, test_X, train_y, test_y = model_selection.train_test_split(X, y, test_size = 0.3)
print(train_X.shape, test_X.shape, train_y.shape, test_y.shape)

model.fit(train_X, train_y)
prediction = model.predict(test_X)

print(prediction) if not cluster:

print('accuracy of {} is: {}'.format(model_name, metrics.accuracy_score(prediction, test_y)))

pre = model.predict([[4.7, 3.2, 1.3, 0.2]])
print(pre)


L1 = X['Petal.Length'].values
L2 = X['Petal.Width'].values
cc = 50*['r'] + 50*['g'] + 50*['b']
plt.scatter(L1, L2, c = cc, marker = '.')

L1 = test_X['Petal.Length'].values
L2 = test_X['Petal.Width'].values
MAP = {0:'r', 1:'g', 2:'b', 3:'y', 4:'k', 5:'w', 6:'m', 7:'c'}
cc = [MAP[_] for _ in prediction]
plt.scatter(L1, L2, c = cc, marker = 's' if cluster else 'x')
plt.show()

 

# logisticfrom sklearn import linear_model

model_fit_show(linear_model.LogisticRegression(), 'LogisticRegression', X, y)

(105, 4) (45, 4) (105,) (45,)
[1 2 2 0 2 0 2 1 0 1 2 1 0 0 0 2 2 1 2 0 2 0 1 2 2 1 0 1 2 1 2 1 0 2 0 1 01 0 0 1 2 2 0 0]
accuracy of LogisticRegression is: 0.9111111111111111
[0]
 

# treefrom sklearn import tree

model_fit_show(tree.DecisionTreeClassifier(), 'DecisionTreeClassifier', X, y)

(105, 4) (45, 4) (105,) (45,)
[2 0 1 0 0 0 1 2 0 0 1 0 2 0 2 1 1 0 2 0 2 0 0 1 1 2 0 2 0 1 2 1 1 1 1 2 11 2 1 1 2 2 2 0]
accuracy of DecisionTreeClassifier is: 0.9111111111111111
[0]

 

#SVMfrom sklearn import svm

model_fit_show(svm.SVC(), 'svm.svc', X, y)

(105, 4) (45, 4) (105,) (45,)
[2 0 0 2 0 1 0 2 1 2 2 0 1 1 0 1 1 2 1 0 2 2 2 1 0 2 2 1 1 1 0 1 0 0 2 0 02 0 0 1 2 1 0 0]
accuracy of svm.svc is: 0.9111111111111111
[0]
py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning."avoid this warning.", FutureWarning)

 

# KNNfrom sklearn import neighbors

model_fit_show(neighbors.KNeighborsClassifier(), 'neighbors.KNeighborsClassifier', X, y)

(105, 4) (45, 4) (105,) (45,)
[1 2 2 2 0 0 0 1 2 2 1 2 1 1 1 2 0 2 0 0 1 1 0 0 1 0 2 2 0 0 2 2 1 1 0 1 10 1 1 2 1 1 0 0]
accuracy of neighbors.KNeighborsClassifier is: 0.9555555555555556
[0]

 

# Kmeanfrom sklearn import cluster

model_fit_show(cluster.KMeans(n_clusters = 3), 'cluster.KMeans', X, y, cluster = True)

(105, 4) (45, 4) (105,) (45,)
[1 2 1 2 2 2 2 2 0 2 2 0 0 2 0 2 0 2 2 1 0 2 1 0 2 2 0 2 0 1 2 2 0 0 2 0 11 1 2 0 1 2 1 0]
[2]

 

# naive bayes# https://scikit-learn.org/dev/modules/classes.html#module-sklearn.naive_bayes# 分别是GaussianNB,MultinomialNB和BernoulliNB。# GaussianNB:先验为高斯分布的朴素贝叶斯,一般应用于连续值# MultinomialNB:先验为多项式分布的朴素贝叶斯,离散多元值分类# BernoulliNB:先验为伯努利分布的朴素贝叶斯,离散二值分类# ComplementNB:对MultinomialNB的补充,适用于非平衡数据from sklearn import naive_bayes

model_fit_show(naive_bayes.BernoulliNB(), 'naive_bayes.BernoulliNB', X, y)
model_fit_show(naive_bayes.GaussianNB(), 'naive_bayes.GaussianNB', X, y)
model_fit_show(naive_bayes.MultinomialNB(), 'naive_bayes.MultinomialNB', X, y)
model_fit_show(naive_bayes.ComplementNB(), 'naive_bayes.ComplementNB', X, y)

(105, 4) (45, 4) (105,) (45,)
[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2]
accuracy of naive_bayes.BernoulliNB is: 0.24444444444444444
[2]

(105, 4) (45, 4) (105,) (45,)
[1 0 1 0 0 1 0 0 0 0 0 0 1 1 1 2 1 0 1 1 2 0 0 2 2 1 2 0 0 1 0 2 0 1 0 2 12 2 2 0 2 0 2 2]
accuracy of naive_bayes.GaussianNB is: 0.9333333333333333
[0]

(105, 4) (45, 4) (105,) (45,)
[0 2 2 1 2 1 2 0 2 1 2 0 2 0 1 1 2 1 0 2 2 2 0 1 1 1 0 2 2 1 1 2 1 0 0 1 00 1 1 2 2 1 2 1]
accuracy of naive_bayes.MultinomialNB is: 0.9555555555555556
[0]

(105, 4) (45, 4) (105,) (45,)
[2 2 2 2 2 2 2 2 2 2 2 0 2 2 2 0 2 2 2 2 0 0 0 2 2 2 0 0 2 2 2 0 2 2 2 0 02 0 2 2 2 2 0 2]
accuracy of naive_bayes.ComplementNB is: 0.6
[0]

​​​​​​​


http://chatgpt.dhexx.cn/article/Z9TRNCr3.shtml

相关文章

sklearn数据集——iris鸢尾花数据集

参考书籍&#xff1a;Python机器学习基础教程 1、初始数据 鸢尾花&#xff08;Iris&#xff09;数据集&#xff0c;是机器学习和统计学中一个经典的数据集。它包含在 scikit-learn 的 datasets 模块中。 我们可以调用 load_iris 函数来加载数据&#xff1a; from sklearn.da…

重拾Iris鸢尾花数据集分析

最近我又又又开始了我的机器学习道路&#xff0c;并且回过头来重新看了一遍Iris数据分析&#xff0c;作为机器学习里面最经典的案例之一&#xff0c;鸢尾花既是我入门机器学习到放弃的地方&#xff0c;又是再次细读之后给予我灵感的地方。 下面介绍一下这次灵感之旅&am…

Python-鸢尾花数据集Iris 数据可视化 :读取数据、显示数据、描述性统计、散点图、直方图、KDE图、箱线图

本博客运行环境为Jupyter Notebook、Python3。使用的数据集是鸢尾花数据集&#xff08;Iris&#xff09;。主要叙述的是数据可视化。 IRIS数据集以鸢尾花的特征作为数据来源&#xff0c;数据集包含150个数据集&#xff0c;有4维&#xff0c;分为3 类&#xff0c;每类50个数据&a…

《机器学习》分析鸢尾花数据集

转载地址&#xff1a;https://www.cnblogs.com/mandy-study/p/7941365.html 分析鸢尾花数据集 下面将结合Scikit-learn官网的逻辑回归模型分析鸢尾花示例&#xff0c;给大家进行详细讲解及拓展。由于该数据集分类标签划分为3类&#xff08;0类、1类、2类&#xff09;&#xff…

笔记篇二:鸢尾花数据集分类

目录 一、鸢尾花数据集 二、逻辑回归分析 三、逻辑回归实现鸢尾花数据集分类 四、散点图绘制 一、鸢尾花数据集 1、问题 Iris 鸢尾花数据集是一个经典数据集&#xff0c;在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录&#xff0c;每类各 5…

IRIS鸢尾花数据集(多种格式)-下载地址

最近看的例子有用到IRIS数据集&#xff0c; 个人找了半天&#xff0c;才找到合适格式的数据集。 因此&#xff0c;将我找到的数据集分享给大家&#xff0c;以免大家像我一样找很久。 我这里有3种格式的数据集&#xff0c;分别是&#xff1a; 1. iris.csv 2. Iris.data 3.…

鸢尾花数据集基本用法

Iris鸢尾花数据集是一个经典的数据集。 包含3类共150条记录&#xff0c;每类各50项数据&#xff0c;每一条记录都有四个体征。 可以通过这四个特征来预测鸢尾花属于哪一个品种。 一.鸢尾花数据集 首先导入数据集&#xff0c;用pandas读入iris.csv数据集&#xff0c;读取后的…

鸢尾花(iris)数据集分析

原文链接&#xff1a;https://www.jianshu.com/p/52b86c774b0b Iris 鸢尾花数据集是一个经典数据集&#xff0c;在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录&#xff0c;每类各 50 个数据&#xff0c;每条记录都有 4 项特征&#xff1a;花萼长度…

鸢尾花(iris)数据集

鸢尾花&#xff08;iris&#xff09;数据集 更新时间&#xff1a;2021-03-21 01:01:09标签&#xff1a;数据集 鸢尾花 说明 机器学习教程 正在计划编写中&#xff0c;欢迎大家加微信 sinbam 提供意见、建议、纠错、催更。 鸢【音&#xff1a;yuān】尾花&#xff08;Iris&a…

数据分析——鸢尾花数据集

鸢尾花数据集 Iris 鸢尾花数据集内包含 3 类分别为山鸢尾&#xff08;Iris-setosa&#xff09;、变色鸢尾&#xff08;Iris-versicolor&#xff09;和维吉尼亚鸢尾&#xff08;Iris-virginica&#xff09;&#xff0c;共 150 条记录&#xff0c;每类各 50 个数据&#xff0c;每…

机器学习--鸢尾花数据集实战

Iris数据集实战 本次主要围绕Iris数据集进行一个简单的数据分析, 另外在数据的可视化部分进行了重点介绍. 环境 win8, python3.7, jupyter notebook 目录 1. 项目背景 2. 数据概览 3. 特征工程 4. 构建模型 正文 1. 项目背景 鸢尾属(拉丁学名&#xff1a;Iris L.), …

sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类

后面对Sklearn的学习主要以《Python机器学习基础教程》和《机器学习实战基于scikit-learn和tensorflow》&#xff0c;两本互为补充进行学习&#xff0c;下面是开篇的学习内容。 1 初识数据 iris数据集的中文名是安德森鸢尾花卉数据集&#xff0c;英文全称是Anderson’s Iris d…

机器学习——鸢尾花数据集

机器学习——鸢尾花数据集 数据集简介导入数据集可视化主成分分析 鸢尾花数据集即iris iris数据集文件&#xff1a; https://pan.baidu.com/s/1saL_4Q9PbFJluU4htAgFdQ .提取码&#xff1a;1234 数据集简介 数据集包含150个样本&#xff08;数据集的行&#xff09;数据集包含…

实验一:鸢尾花数据集分类

实验一&#xff1a;鸢尾花数据集分类 一、问题描述 利用机器学习算法构建模型&#xff0c;根据鸢尾花的花萼和花瓣大小&#xff0c;区分鸢尾花的品种。实现一个基础的三分类问题。 二、数据集分析 Iris 鸢尾花数据集内包含 3 种类别&#xff0c;分别为山鸢尾&#xff08;Iris…

C++优化之使用emplace

在C开发过程中&#xff0c;我们经常会用STL的各种容器&#xff0c;比如vector&#xff0c;map&#xff0c;set等&#xff0c;这些容器极大的方便了我们的开发。在使用这些容器的过程中&#xff0c;我们会大量用到的操作就是插入操作&#xff0c;比如vector的push_back&#xff…

C++ emplace_back

概述 在C11中&#xff0c;在引入右值的升级后&#xff0c;调用push_back变的更为高效&#xff0c;原本需要调用构造函数构造这个临时对象&#xff0c;然后调用拷贝构造函数将这个临时对象放入容器中。在C11升级后&#xff0c;只需要调用构造函数&#xff0c;然后调用移动拷贝函…

list容器下的 emplace_front() splice() 函数

目录 emplace_front()splice()作者的坑时间复杂度注意点&#xff1a;疑惑处 emplace_front() emplace中文为安置&#xff0c;那么这个函数就是安置到什么什么前面。 void emplace_front(value_type val) ;时间复杂度&#xff1a;O(1) splice() splice译为粘接&#xff0c;作用…

C++优化之使用emplace、emplace_back

在C开发过程中&#xff0c;我们经常会用STL的各种容器&#xff0c;比如vector&#xff0c;map&#xff0c;set等。在使用这些容器的过程中&#xff0c;我们会大量用到的操作就是插入操作&#xff0c;比如vector的push_back&#xff0c;map的insert&#xff0c;set的insert。这些…

emplace_back深度剖析

一&#xff0c;emplace_back和push_back 1&#xff0c;直接插入对象&#xff1a;emplace_back和push_back无区别 ①当传递已经存在的对象时&#xff0c;是无区别的 #include <iostream> #include <vector>using namespace std;/* C11 STL 容器 push/inser…

push_back和emplace_back区别

在使用vector容器时&#xff0c;往容器里添加元素时&#xff0c;有push_back和emplace_back两种方法&#xff0c;一般用得最多得是push_back&#xff0c;下面看看这两种方法得区别&#xff1a; push_back源码&#xff0c;有重载得左值和右值&#xff0c;关于左值和右值可以查看…