文章目录

  • 一.Iris数据集的 Fisher线性分类判断准确率
    • 1.代码:
    • 2.结果:
  • 二.数据可视化
  • 1.数据显示
  • 2.描述性统计
  • 3.特征计数
  • 三.特征工程
  • 1.绘制花萼的长度与宽度的散点图
  • 2.绘制花瓣的长度与宽度的散点图
  • 3.关系图
  • 4.散点图与直方图
  • 5.箱线图
  • 6.绘制琴图
  • 7.绘制分布图
  • 个人博客链接

一.Iris数据集的 Fisher线性分类判断准确率

1.代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
path=r'Iris.csv'
df = pd.read_csv(path, header=0)
Iris1=df.values[0:50,0:4]
Iris2=df.values[50:100,0:4]
Iris3=df.values[100:150,0:4]
m1=np.mean(Iris1,axis=0)
m2=np.mean(Iris2,axis=0)
m3=np.mean(Iris3,axis=0)
s1=np.zeros((4,4))
s2=np.zeros((4,4))
s3=np.zeros((4,4))
for i in range(0,30,1):a=Iris1[i,:]-m1a=np.array([a])b=a.Ts1=s1+np.dot(b,a)
for i in range(0,30,1):c=Iris2[i,:]-m2c=np.array([c])d=c.Ts2=s2+np.dot(d,c) #s2=s2+np.dot((Iris2[i,:]-m2).T,(Iris2[i,:]-m2))
for i in range(0,30,1):a=Iris3[i,:]-m3a=np.array([a])b=a.Ts3=s3+np.dot(b,a)
sw12=s1+s2
sw13=s1+s3
sw23=s2+s3
#投影方向
a=np.array([m1-m2])
sw12=np.array(sw12,dtype='float')
sw13=np.array(sw13,dtype='float')
sw23=np.array(sw23,dtype='float')
#判别函数以及T
#需要先将m1-m2转化成矩阵才能进行求其转置矩阵
a=m1-m2
a=np.array([a])
a=a.T
b=m1-m3
b=np.array([b])
b=b.T
c=m2-m3
c=np.array([c])
c=c.T
w12=(np.dot(np.linalg.inv(sw12),a)).T
w13=(np.dot(np.linalg.inv(sw13),b)).T
w23=(np.dot(np.linalg.inv(sw23),c)).T
#print(m1+m2) #1x4维度  invsw12 4x4维度  m1-m2 4x1维度
T12=-0.5*(np.dot(np.dot((m1+m2),np.linalg.inv(sw12)),a))
T13=-0.5*(np.dot(np.dot((m1+m3),np.linalg.inv(sw13)),b))
T23=-0.5*(np.dot(np.dot((m2+m3),np.linalg.inv(sw23)),c))
kind1=0
kind2=0
kind3=0
newiris1=[]
newiris2=[]
newiris3=[]
for i in range(30,49):x=Iris1[i,:]x=np.array([x])g12=np.dot(w12,x.T)+T12g13=np.dot(w13,x.T)+T13g23=np.dot(w23,x.T)+T23if g12>0 and g13>0:newiris1.extend(x)kind1=kind1+1elif g12<0 and g23>0:newiris2.extend(x)elif g13<0 and g23<0 :newiris3.extend(x)
#print(newiris1)
for i in range(30,49):x=Iris2[i,:]x=np.array([x])g12=np.dot(w12,x.T)+T12g13=np.dot(w13,x.T)+T13g23=np.dot(w23,x.T)+T23if g12>0 and g13>0:newiris1.extend(x)elif g12<0 and g23>0:newiris2.extend(x)kind2=kind2+1elif g13<0 and g23<0 :newiris3.extend(x)
for i in range(30,50):x=Iris3[i,:]x=np.array([x])g12=np.dot(w12,x.T)+T12g13=np.dot(w13,x.T)+T13g23=np.dot(w23,x.T)+T23if g12>0 and g13>0:newiris1.extend(x)elif g12<0 and g23>0:     newiris2.extend(x)elif g13<0 and g23<0 :newiris3.extend(x)kind3=kind3+1
#花瓣与花萼的长度散点图
plt.scatter(df.values[:50, 3], df.values[:50, 1], color='red', marker='o', label='setosa')
plt.scatter(df.values[50:100, 3], df.values[50: 100, 1], color='blue', marker='x', label='versicolor')
plt.scatter(df.values[100:150, 3], df.values[100: 150, 1], color='green', label='virginica')
plt.xlabel('petal length')
plt.ylabel('sepal length')
plt.title("花瓣与花萼长度的散点图")
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
plt.legend(loc='upper left')
plt.show()#花瓣与花萼的宽度度散点图
plt.scatter(df.values[:50, 4], df.values[:50, 2], color='red', marker='o', label='setosa')
plt.scatter(df.values[50:100, 4], df.values[50: 100, 2], color='blue', marker='x', label='versicolor')
plt.scatter(df.values[100:150, 4], df.values[100: 150, 2], color='green', label='virginica')
plt.xlabel('petal width')
plt.ylabel('sepal width')
plt.title("花瓣与花萼宽度的散点图")
plt.legend(loc='upper left')
plt.show()correct=(kind1+kind2+kind3)/60
print("样本类内离散度矩阵S1:",s1,'\n')
print("样本类内离散度矩阵S2:",s2,'\n')
print("样本类内离散度矩阵S3:",s3,'\n')
print('-----------------------------------------------------------------------------------------------')
print("总体类内离散度矩阵Sw12:",sw12,'\n')
print("总体类内离散度矩阵Sw13:",sw13,'\n')
print("总体类内离散度矩阵Sw23:",sw23,'\n')
print('-----------------------------------------------------------------------------------------------')
print('判断出来的综合正确率:',correct*100,'%')

2.结果:



二.数据可视化

1.数据显示

import pandas as pd
df_Iris = pd.read_csv(r'Iris.csv')
#前五行数据
print(df_Iris.head())
print('-----------------------------------------------------------------------------------------------')
#后五行数据
print(df_Iris.tail())print('-----------------------------------------------------------------------------------------------')
#查看数据整体信息
df_Iris.info()
print('-----------------------------------------------------------------------------------------------')
   Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm      Species
0   1            5.1           3.5            1.4           0.2  Iris-setosa
1   2            4.9           3.0            1.4           0.2  Iris-setosa
2   3            4.7           3.2            1.3           0.2  Iris-setosa
3   4            4.6           3.1            1.5           0.2  Iris-setosa
4   5            5.0           3.6            1.4           0.2  Iris-setosa
-----------------------------------------------------------------------------------------------Id  SepalLengthCm  SepalWidthCm  PetalLengthCm  PetalWidthCm  \
145  146            6.7           3.0            5.2           2.3
146  147            6.3           2.5            5.0           1.9
147  148            6.5           3.0            5.2           2.0
148  149            6.2           3.4            5.4           2.3
149  150            5.9           3.0            5.1           1.8   Species
145  Iris-virginica
146  Iris-virginica
147  Iris-virginica
148  Iris-virginica
149  Iris-virginica
-----------------------------------------------------------------------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 6 columns):
Id               150 non-null int64
SepalLengthCm    150 non-null float64
SepalWidthCm     150 non-null float64
PetalLengthCm    150 non-null float64
PetalWidthCm     150 non-null float64
Species          150 non-null object
dtypes: float64(4), int64(1), object(1)
memory usage: 7.2+ KB
-----------------------------------------------------------------------------------------------

2.描述性统计

#描述性统计
df_Iris.describe()
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
count 150.000000 150.000000 150.000000 150.000000 150.000000
mean 75.500000 5.843333 3.054000 3.758667 1.198667
std 43.445368 0.828066 0.433594 1.764420 0.763161
min 1.000000 4.300000 2.000000 1.000000 0.100000
25% 38.250000 5.100000 2.800000 1.600000 0.300000
50% 75.500000 5.800000 3.000000 4.350000 1.300000
75% 112.750000 6.400000 3.300000 5.100000 1.800000
max 150.000000 7.900000 4.400000 6.900000 2.500000

3.特征计数

df_Iris.Species.value_counts()
Iris-virginica     50
Iris-versicolor    50
Iris-setosa        50
Name: Species, dtype: int64

三.特征工程

import seaborn as sns
import matplotlib.pyplot as plt
#sns初始化
sns.set()
#去掉Species下的字符
df_Iris['Species']= df_Iris.Species.apply(lambda x: x.split('-')[1])
df_Iris.Species.unique()
array(['setosa', 'versicolor', 'virginica'], dtype=object)

1.绘制花萼的长度与宽度的散点图

#花萼长度与宽度
sns.relplot(x='SepalLengthCm', y='SepalWidthCm', hue='Species', style='Species', data=df_Iris )
plt.title('SepalLengthCm and SepalWidthCm data by Species')
Text(0.5, 1, 'SepalLengthCm and SepalWidthCm data by Species')

2.绘制花瓣的长度与宽度的散点图

#花瓣长度与宽度散点分布图
sns.relplot(x='PetalLengthCm', y='PetalWidthCm', hue='Species', style='Species', data=df_Iris )
plt.title('PetalLengthCm and PetalWidthCm data by Species')
Text(0.5, 1, 'PetalLengthCm and PetalWidthCm data by Species')

3.关系图

#花萼长度与Id之间关系图
sns.relplot(x="Id", y="SepalLengthCm",hue="Species", style="Species",kind="line", data=df_Iris)
plt.title('SepalLengthCm and Id data analysize')
#花萼宽度与Id之间关系图
sns.relplot(x="Id", y="SepalWidthCm",hue="Species", style="Species",kind="line", data=df_Iris)
plt.title('SepalWidthCm and Id data analysize')
#花瓣长度与Id之间关系图
sns.relplot(x="Id", y="PetalLengthCm",hue="Species", style="Species",kind="line", data=df_Iris)
plt.title('PetalLengthCm and Id data analysize')
#花瓣宽度与Id之间关系图
sns.relplot(x="Id", y="PetalWidthCm",hue="Species", style="Species",kind="line", data=df_Iris)
plt.title('PetalWidthCm and Id data analysize')
Text(0.5, 1, 'PetalWidthCm and Id data analysize')




4.散点图与直方图

#花萼长度与宽度直方图
sns.jointplot(x='SepalLengthCm', y='SepalWidthCm', data=df_Iris)
#花瓣长度与宽度直方图
sns.jointplot(x='PetalLengthCm', y='PetalWidthCm', data=df_Iris)
<seaborn.axisgrid.JointGrid at 0x2758dd42ec8>


5.箱线图

箱线图能显示出一组数据的最大值, 最小值, 四分位数以及异常点

#比如数据中的SepalLengthCm属性
sns.boxplot(x='SepalLengthCm', data=df_Iris)
<matplotlib.axes._subplots.AxesSubplot at 0x2758da0d1c8>

#对于每个属性的data创建一个新的DataFrame
import numpy as np
Iris1 = pd.DataFrame({"Id": np.arange(1,151), 'Attribute': 'SepalLengthCm', 'Data':df_Iris.SepalLengthCm, 'Species':df_Iris.Species})
Iris2 = pd.DataFrame({"Id": np.arange(151,301), 'Attribute': 'SepalWidthCm', 'Data':df_Iris.SepalWidthCm, 'Species':df_Iris.Species})
Iris3 = pd.DataFrame({"Id": np.arange(301,451), 'Attribute': 'PetalLengthCm', 'Data':df_Iris.PetalLengthCm, 'Species':df_Iris.Species})
Iris4 = pd.DataFrame({"Id": np.arange(451,601), 'Attribute': 'PetalWidthCm', 'Data':df_Iris.PetalWidthCm, 'Species':df_Iris.Species})
#将四个DataFrame合并为一个.
Iris = pd.concat([Iris1, Iris2, Iris3, Iris4])
#绘制箱线图
sns.boxplot(x='Attribute', y='Data', data=Iris)
<matplotlib.axes._subplots.AxesSubplot at 0x2758ddaed48>

sns.boxplot(x='Attribute', y='Data',hue='Species', data=Iris)
<matplotlib.axes._subplots.AxesSubplot at 0x2758de44448>

6.绘制琴图

sns.violinplot(x='Attribute', y='Data', hue='Species', data=Iris )
<matplotlib.axes._subplots.AxesSubplot at 0x2758df9a688>

7.绘制分布图

sns.pairplot(df_Iris.drop('Id', axis=1), hue='Species')
#保存图片
plt.savefig('pairplot.png')
plt.show()

个人博客链接

Jupyter完成Iris数据集的 Fisher线性分类和数据可视化技术相关推荐

  1. 机器学习--Iris数据集的Fisher线性分类以及数据可视化技术的学习

    Iris数据集的Fisher线性分类以及数据可视化技术的学习 1.Iris数据集的Fisher线性分类 2.数据可视化技术的学习 1.数据集介绍 2.观看数据前5行 3.特征工程 1.数据清洗 2.数 ...

  2. 支持向量机鸢尾花Iris数据集的SVM线性分类练习

    支持向量机&鸢尾花Iris数据集的SVM线性分类练习 摘要 一.SVM基础 1.三种支持向量机 2.非线性支持向量机 二.鸢尾花实例 1.认识鸢尾花 2.鸢尾花实例演示 3.使用多项式特征和核 ...

  3. Python机器学习实验二:1.编写代码,实现对iris数据集的KNN算法分类及预测

    Python机器学习实验二:编写代码,实现对iris数据集的KNN算法分类及预测 1.编写代码,实现对iris数据集的KNN算法分类及预测,要求: (1)数据集划分为测试集占20%: (2)n_nei ...

  4. r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化

    本文内容原创,未经作者许可禁止转载! 目录 一.前言 二.摘要 三.关键词 四.算法原理 五.经典应用 六.R建模 1.载入相关包(内含彩蛋): 1.1 library包载入 1.2 pacman包载 ...

  5. 数据可视化之雷达图:自助数据集处理,完美演绎球员数据可视化

    数据可视化,不只应用于工作或者财务报告,在某些场合通过使用图表展示数据,进行信息可视化表达,不仅可以省去繁冗的文字,还能更为清晰直观地展示,化平庸为神奇,让任何人有认真看的欲望. 当今世界人们越来越崇 ...

  6. 通过K-means对iris数据集进行处理 Kmeans聚类算法实例

    Python from sklearn import datasets import matplotlib.pyplot as plt from sklearn.cluster import KMea ...

  7. 几种聚类算法在IRIS数据集上的应用(python)

    分解聚类.C均值聚类及其改进.ISODATA应用在IRIS数据集的表现 IRIS数据集 分解聚类 C均值聚类 ISODATA K均值聚类 这个其实是之前的一次课程作业,要求是对鸢尾花数据集IRIS做聚 ...

  8. matlab fisher检验,FISHER线性判别MATLAB实现.doc

    FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...

  9. 逻辑回归(Logistic regression)详解-并用scikit-learn训练逻辑回归拟合Iris数据集

    这篇文章主要介绍逻辑回归背后的一些概率概念,给你一些直观感觉关于它的代价函数的由来.并且我也介绍了关于最大似然估计(maximum likelihood)的概念,用这个强大的工具来导出逻辑回归的cos ...

最新文章

  1. 多个线程为了同个资源打起架来了,该如何让他们安分?
  2. python连接oracle超时设置,Python连接Oracle设置过程记录
  3. 时间轴ui设计_我应该在UI设计上花更多时间吗?
  4. hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
  5. JavaScript-jQuery操作Dom元素
  6. java正则表达式 后顾,正则表达式:从Copy到手写
  7. JasperReports学习(1)
  8. Python3学习笔记18-访问限制
  9. mirbase数据库简介
  10. 使Window注册表更改立刻生效的命令行命令
  11. Python 的输出矩阵的一些常用设置
  12. 0441-Impala动态资源池及放置规则使用
  13. matlab世界坐标系转化,坐标变换_世界坐标系与用户坐标系之间的转换
  14. 为什么mysql填不了数据库_求助,为何我的数据不能写入数据库
  15. 思必达软件督查督办软件技术开发与设计
  16. 动画效果编程基础详解--Animation Android
  17. appium实现向上滑动,向下滑动,向左滑动,向右滑动
  18. BlockingQueue及其实现
  19. Shell字符串比较
  20. 抄板PCB,好麻烦!

热门文章

  1. 2021年山东省安全员C证考试及山东省安全员C证考试试卷
  2. Python灰帽子:黑客与逆向工程师的Python编程之道
  3. X210驱动框架学习和实践
  4. Jmeter实现并发测试
  5. 如何计算用户在某个车站上下车,地图匹配方法
  6. 艾德克斯电子负载IT8510维修
  7. Java ~ 微信公众号开发。
  8. Idea打包war包并部署到tomcat的配置文件
  9. 【php基础入门】PHP环境搭建与初识php代码书写及演示PHP和JS中遍历数组的区别、引入外部文件等知识点学习笔记
  10. 从风靡全球到风口,Tiktok是如何做到的?