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

Nita ·
更新时间:2024-11-01
· 578 次阅读

Iris数据集的Fisher线性分类以及数据可视化技术的学习1.Iris数据集的Fisher线性分类2.数据可视化技术的学习1.数据集介绍2.观看数据前5行3.特征工程1.数据清洗2.数据可视化3.jointplot4.distplot5.boxplot6.violinplot7.violinplot8.pairplot 1.Iris数据集的Fisher线性分类 import pandas as pd import numpy as np import matplotlib.pyplot as plt path=r'./Iris.xls' 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,:]-m1 a=np.array([a]) b=a.T s1=s1+np.dot(b,a) for i in range(0,30,1): c=Iris2[i,:]-m2 c=np.array([c]) d=c.T s2=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,:]-m3 a=np.array([a]) b=a.T s3=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(29,49): x=Iris1[i,:] x=np.array([x]) g12=np.dot(w12,x.T)+T12 g13=np.dot(w13,x.T)+T13 g23=np.dot(w23,x.T)+T23 if g12>0 and g13>0: newiris1.extend(x) kind1=kind1+1 elif g120: newiris2.extend(x) elif g13<0 and g230 and g13>0: newiris1.extend(x) elif g120: newiris2.extend(x) kind2=kind2+1 elif g13<0 and g230 and g13>0: newiris1.extend(x) elif g120: 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,'%')

结果图:
原创文章 25获赞 52访问量 2210 关注 私信 展开阅读全文
作者:三分奶茶七分糖丶



fisher 可视化技术 学习 分类 iris 数据可视化 可视化 机器学习

需要 登录 后方可回复, 如果你还没有账号请 注册新账号