Python数学建模之判别分析

判别分析之距离判别法的原理及代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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))

在这里插入图片描述

在这里插入图片描述

ps:关于代码中的np.hstack用法:
https://blog.csdn.net/nanhuaibeian/article/details/100597342?ops_request_misc=&request_id=&biz_id=102&utm_term=g=np.hstack&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

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

附加例题:
在这里插入图片描述
在这里插入图片描述
以后就用马氏距离 他用到了矩阵协方差的问题

关于协方差的问题:别忘记.T转置矩阵
在这里插入图片描述
https://blog.csdn.net/baidu_32134295/article/details/52492806?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162797397816780255247156%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162797397816780255247156&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-52492806.first_rank_v2_pc_rank_v29&utm_term=%E5%8D%8F%E6%96%B9%E5%B7%AE%E7%9F%A9%E9%98%B5%E7%9A%84%E6%84%8F%E4%B9%89&spm=1018.2226.3001.4187

判别分析之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))

在这里插入图片描述
header=none是对于没有列标题的
https://blog.csdn.net/qq_43751200/article/details/111185138?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162797498716780274180061%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162797498716780274180061&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-1-111185138.first_rank_v2_pc_rank_v29&utm_term=%E8%AF%BB%E5%8F%96excel%E6%95%B0%E6%8D%AEheader%3Dnone&spm=1018.2226.3001.4187

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值