Fisher(LDA) 判别分析

2020-03-06  本文已影响0人  你的仙女本仙

(sklearn)线性判别分析LinearDiscriminantAnalysis
算法一般解释:
将高维度空间的样本投影到低维空间上,使得投影后的样本数据在新的子空间上有最小的类内距离以及最大的类间距离,使得在该子空间上有最佳的可分离性
最大的类间距离--即要投影后两个样本的质心离得越远越好,那么就能得到
最小的类内距离--即要使得投影后同一类的样本点尽可能聚拢在一起,离质心越近越好

"""
现在我们对LDA降维的流程做一个总结。

输入:数据集D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本xi为n维向量,yi∈{C1,C2,...,Ck},降维到的维度d。

输出:降维后的样本集D′

1) 计算类内散度矩阵Sw
    2) 计算类间散度矩阵Sb
    3) 计算矩阵Sw^−1Sb
    4)计算Sw^−1
Sb的最大的d个特征值和对应的d个特征向量(w1,w2,...wd),得到投影矩阵W
    5) 对样本集中的每一个样本特征xi,转化为新的样本zi=WT*xi
    6) 得到输出样本集
  
"""

fix(X,y):训练模型。
predict(X):用模型进行预测,返回预测值。
score(X,y[,sample_weight]):返回(X,y)上的预测准确率(accuracy)。
predict_log_proba(X):返回一个数组,数组的元素一次是 X 预测为各个类别的概率的对数值。
predict_proba(X):返回一个数组,数组元素一次是 X 预测为各个类别的概率的概率值。


image.png
import pandas as pd  #导入pandas库
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
df = pd.read_excel("第二版表4.1.xlsx") # 读取excle
array1 = df.values  #讲excel表格数据转化为矩阵
#训练集
array =array1[0:15,1:7]#选取矩阵特定的数据
X=array
#训练集分类结果
Y=array1[0:15,7:8]
clf = LinearDiscriminantAnalysis(solver='svd')
clf.fit(X,Y.ravel())
test=array1[15:19,1:7]
pr=clf.predict(test)
print("预测分类结果:",pr)


image.png
上一篇下一篇

猜你喜欢

热点阅读