600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Jupyter完成Iris数据集的 Fisher线性分类和数据可视化技术

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

时间:2024-08-31 12:04:18

相关推荐

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

文章目录

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

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

1.代码:

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt %matplotlib inlinepath=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+s2sw13=s1+s3sw23=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-m2a=np.array([a])a=a.Tb=m1-m3b=np.array([b])b=b.Tc=m2-m3c=np.array([c])c=c.Tw12=(np.dot(np.linalg.inv(sw12),a)).Tw13=(np.dot(np.linalg.inv(sw13),b)).Tw23=(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=0kind2=0kind3=0newiris1=[]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']=Falseplt.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)/60print("样本类内离散度矩阵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 pddf_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 PetalWidthCmSpecies0 1 5.1 3.5 1.4 0.2 Iris-setosa1 2 4.9 3.0 1.4 0.2 Iris-setosa2 3 4.7 3.2 1.3 0.2 Iris-setosa3 4 4.6 3.1 1.5 0.2 Iris-setosa4 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 149Data columns (total 6 columns):Id150 non-null int64SepalLengthCm 150 non-null float64SepalWidthCm150 non-null float64PetalLengthCm 150 non-null float64PetalWidthCm150 non-null float64Species150 non-null objectdtypes: float64(4), int64(1), object(1)memory usage: 7.2+ KB-----------------------------------------------------------------------------------------------

2.描述性统计

#描述性统计df_Iris.describe()

3.特征计数

df_Iris.Species.value_counts()

Iris-virginica50Iris-versicolor 50Iris-setosa 50Name: Species, dtype: int64

三.特征工程

import seaborn as snsimport 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创建一个新的DataFrameimport numpy as npIris1 = 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()

个人博客链接

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。