基于jupyter的Python编程 - Fisher线性分类和可视化
一、基于iris数据集的Fisher线性分类
Python完整代码如下
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('F:/COLLEGE-Three/人工智能与机器学习/iris.csv',header=0)
Iris1 = data.values[0:50,0:4]
Iris2 = data.values[50:100,0:4]
Iris3 = data.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):
a1 = Iris1[i,:] - m1
a1 = np.array([a1])
b1 = a1.T
s1 = s1 + np.dot(b1,a1)
for i in range(0,30,1):
a2 = Iris2[i,:] - m2
a2 = np.array([a2])
b2 = a2.T
s2 = s2 + np.dot(b2,a2)
for i in range(0,30,1):
a3 = Iris3[i,:] - m3
a3 = np.array([a3])
b3 = a3.T
s3 = s3 + np.dot(b3,a3)
#总类内离散矩阵
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')
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),a)).T
w23 = (np.dot(np.linalg.inv(sw23),a)).T
#判别函数以及阈值T(即w0)
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)),a))
T23 = -0.5 * (np.dot(np.dot((m2 + m3),np.linalg.inv(sw23)),a))
kind1 = 0
kind2 = 0
kind3 = 0
newiris1 = []
newiris2 = []
newiris3 = []
for i in range