判别分析之距离判别法的原理及代码
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
X0=np.array([[1.24,1.27],[1.36,1.74],[1.38,1.90],[1.38,1.82],[1.38,1.90],[1.40,1.70],[1.48,1.82],[1.54,1.82],[1.56,2.08],[1.14,1.78],[1.18,1.96],[1.20,1.86],[1.26,2.00],[1.28,2.00],[1.30,1.96]])
x=np.array([[1.24,1.80],[1.28,1.84],[1.40,2.04]])
g=np.hstack([np.ones(9),2*np.ones(6)])
v=np.cov(X0.T)
knn=KNeighborsClassifier(2,metric='mahalanobis',metric_params={'V':v})
knn.fit(X0,g); pre=knn.predict(x);print("马氏距离:",pre)
print("马氏距离已知样本误判率:",1-knn.score(X0,g))
knn2=KNeighborsClassifier(2)
knn2.fit(X0,g); pre2=knn2.predict(x)
print("欧式距离",pre2)
print("欧氏距离误判率",1-knn2.score(X0,g))
np.ones和zeros 一个生成1 另一个生成0的不同维度数组
https://blog.csdn.net/cunchi4221/article/details/107471968?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-4.control
附加例题:
以后就用马氏距离 他用到了矩阵协方差的问题
判别分析之Fisher判别法的原理及代码
import numpy as np
from sklearn.discriminant_analysis import \
LinearDiscriminantAnalysis as LDA
from sklearn.neighbors import KNeighborsClassifier
X0=np.array([[1.24,1.27],[1.36,1.74],[1.38,1.90],[1.38,1.82],[1.38,1.90],[1.40,1.70],[1.48,1.82],[1.54,1.82],[1.56,2.08],[1.14,1.78],[1.18,1.96],[1.20,1.86],[1.26,2.00],[1.28,2.00],[1.30,1.96]])
x=np.array([[1.24,1.80],[1.28,1.84],[1.40,2.04]])
g=np.hstack([np.ones(9),2*np.ones(6)])
# v=np.cov(X0.T)
# knn=KNeighborsClassifier(2,metric='mahalanobis',metric_params={'V':v})
# knn.fit(X0,g); pre=knn.predict(x);print("马氏距离:",pre)
# print("马氏距离已知样本误判率:",1-knn.score(X0,g))
# knn2=KNeighborsClassifier(2)
# knn2.fit(X0,g); pre2=knn2.predict(x)
# print("欧式距离",pre2)
# print("欧氏距离误判率",1-knn2.score(X0,g))
clf =LDA()
clf.fit(X0,g)
print("判别结果为",clf.predict(x))
print("已知样本的误判率为:",1-clf.score(X0,g))
模型检验
import numpy as np
import pandas as pd
from sklearn.discriminant_analysis import\
LinearDiscriminantAnalysis
from sklearn.model_selection import cross_val_score
a=pd.read_excel("---",header=None)
b=a.values()
x0=b.iloc[:-2,1:-1].astype(float)
y0=b[:-2,-1].astype(int)
model=LinearDiscriminantAnalysis()
print(cross_val_score(model,x0,y0,cv=2))