【实验目的】

1.掌握常见机器学习分类模型思想、算法,包括Fisher线性判别、KNN、朴素贝叶斯、Logistic回归、决策树等;
2.掌握Python编程实现分类问题,模型评价指标、计时功能、保存模型。

【实验要求】

  1. 理解Python在分类问题中的评价指标等细节操作;
  2. 掌握本章讲授的分类问题的Python编程操作。

【实验过程】(必要的实验步骤、绘图、代码注释、数据分析)

实验步骤
1、读入数据
2、数据预处理
3、数据分析方法介绍
4、编程实现数据分析方法,含代码注释
5、重要结果的图表绘制
6、必要的结果解释

【实验题目】

利用Fisher线性判别分类器计算下面的问题,要求报告模型评价指标、计时功能、保存模型。
为了防止出现假冒伪劣、逃避关税情况,某海关单位已有以往化验检测2个原产地的葡萄酒样品124个,现有6个未知类别样本葡萄酒需要确定来源地,如何制定检验策略对6个未知样本原产地进行甄别?利用所学分类算法探讨此问题,要求进行模型评价、增加计时功能、保存模型。数据见 data_wine_new.csv.

0 1 分别对应1 2原产地

Fisher线性判别模型

代码

# -*- coding: utf-8 -*-
'''step1 调用包'''
import time
starttime = time.time()
import pandas as pd
import numpy as np
from sklearn import discriminant_analysis
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score  #调用准确率计算函数
from sklearn import metrics
from sklearn.metrics import confusion_matrix,classification_report'''step2 导入数据'''
data = pd.read_csv('data_wine_new.csv')'''step3 数据预处理'''
# 把带类标号数据(用于训练和检验)
# 和待判(最后3行)数据分开
data_used = data.iloc[:124,:]
#Python从0开始计数,故上一行代码从第0行取到第114行
#共提取了115行。data_unused = data.iloc[124:,:]'''step4 划分数据集'''
#(将带类标号数据
#划分为训练集(75%)
#和检验集(25%)#将类别列和特征列拆分,
#便于下面调用划分函数
y_data=data_used.iloc[:,0]
x_data=data_used.iloc[:,1:]#调用sklearn中的函数划分上述数据
x_train, x_test, y_train, y_test = train_test_split(x_data,y_data,test_size=0.25,random_state=0)'''step5 模型计算(训练、检验、评价)'''
#step5.1 训练模型
lda_fisher = discriminant_analysis.LinearDiscriminantAnalysis()
lda_fisher.fit(x_train, y_train)
print('\n 判别函数系数:xi系数:\n',np.round(lda_fisher.coef_,2))
print('\n判别函数系数:截距:\n' ,np.round(lda_fisher.intercept_,2))#step5.2 检验模型
pred_test = lda_fisher.predict(x_test)#step5.3 模型评价(准确率)
#这里y_test为真实检验集类标号
#pred_test为模型预测的检验集类标号
#比较二者即可得到准确率
# acc_test = accuracy_score(y_test,pred_test)
# print('检验准确率为:',acc_test)'''模型评价  升级版'''
accuracy_score = accuracy_score(y_test,pred_test)
confusion_matrix = confusion_matrix(y_test,pred_test,labels=[0,1])
classification_report = classification_report(y_test,pred_test,labels=[0,1], target_names=["1号原产地","2号原产地"])
classification_report_split=classification_report.split ()   #提取矩阵中的值
#        auc = auc(best_estimator, X_train, X_test) ##计算AUC
#        from sklearn import metrics
from itertools import cycle
colors = cycle('gmcr')
if hasattr(lda_fisher, 'predict_proba'):y_score = lda_fisher.predict_proba(x_test)y_score=y_score[:,1]
else:y_score = lda_fisher.decision_function(x_test)
fpr, tpr, thresholds = metrics.roc_curve(y_test, y_score)
auc = metrics.auc(fpr, tpr)
#        print('\n AUC is:',auc)endtime = time.time()
testtime = endtime-starttimeprint('\n confusion_matrix = \n',confusion_matrix)
print('\n classification_report =\n', classification_report)
print('\n accuracy_score= ',accuracy_score)
print('\n precison= ',metrics.precision_score(y_test, pred_test))
print('\n recall= ',metrics.recall_score(y_test, pred_test))
print('\n f1_Score= ',metrics.f1_score(y_test, pred_test))
#        print('\n auc of train/test =', auc )
print('\n AUC is:',auc)
print("\n Time consuming is",testtime)'''step6 模型存储'''
import joblib
joblib.dump(lda_fisher,'model_Fisher.m')   #保存模型'''step7 预测结果'''
#模型训练完,检验效果满意
#未知类别进行预测(分类)
x_unused = data_unused.iloc[:,1:]
pred_unused = lda_fisher.predict(x_unused)
print('待判样本预测类别为:',pred_unused)

结果

判别函数系数:xi系数:
[[-4.22 -0.94 -7.94 0.92 -0.02 2.89 -2.19 -0.09 1.99 0.06 -0.91 -5.49
-0.02]]

判别函数系数:截距:
[85.44]

confusion_matrix =
[[16 0]
[ 0 15]]

classification_report = precision recall f1-score support
1号原产地 1.00 1.00 1.00 16
2号原产地 1.00 1.00 1.00 15
accuracy 1.00 31
macro avg 1.00 1.00 1.00 31
weighted avg 1.00 1.00 1.00 31

accuracy_score= 1.0

precison= 1.0

recall= 1.0

f1_Score= 1.0

AUC is: 1.0

Time consuming is 0.025928735733032227
待判样本预测类别为: [1. 1. 1. 0. 0. 0.]

Python 分类问题研究-Fisher线性判别相关推荐

  1. 模式识别(1)Fisher线性判别

    Fisher线性判别 分类是我们经常会遇到是问题,下面主要介绍Fisher线性判别,利用Fisher算法来分类UCI数据集中的Iris数据集和Sonar数据集. 一.数据集说明 UCI数据库是加州大学 ...

  2. fisher判别_经典模式识别:Fisher线性判别

    本文将介绍Fisher线性判别的原理和具体实践,阅读时间约8分钟,关注公众号可在后台领取数据集资源哦^-^ Fisher线性判别 1.背景介绍 生活中我们往往会遇到具有高维特性的数据,如个人信息,天气 ...

  3. 朴素贝叶斯分类器与Fisher线性判别实践——水果识别为例

    开篇:本次博客主要分享二分类水果实现案例,样本构造显然不具备泛化.大数量特性以及背景均为纯白色是为了方便目标提取.大家若需要更好的水果样本,Github上有许多的优秀案例.本次代码计算效率较低,代码有 ...

  4. 【机器学习】Fisher线性判别与线性感知机

    来源 | AI小白入门 作者 | 文杰 编辑 | yuquanle 原文链接 Fisher线性判别与线性感知机 ​ Fisher线性判别和线性感知机都是针对分类任务,尤其是二分类,二者的共同之处在于都 ...

  5. Fisher线性判别

    Fisher线性判别 一.算法介绍 1.背景: 在应用统计方法解决模式识别问题时,一再碰到的问题之一就是维度问题,在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通.降低维度有时会成为处理 ...

  6. 基于fisher线性判别法的分类器设计

    0.引言说明 这篇文章实际上是楼主上的模式识别课程的课堂报告,楼主偷懒把东西直接贴出来了.选择fisher判别法的原因主要是想学习一下这个方法,这个方法属于线性判别法,操作起来和lda判别法近乎没啥区 ...

  7. Fisher线性判别算法原理及实现 MATLAB

    Fisher线性判别算法原理及实现 MATLAB 一.Fisher判别器原理 二.代码实现 clc; close all; clear; %% 生成数据 rng(2020); %指定一个种子 mu1 ...

  8. matlab fisher检验,FISHER线性判别MATLAB实现.doc

    FISHER线性判别MATLAB实现 Fisher线性判别上机实验报告 班级: 学号: 姓名: 算法描述 Fisher线性判别分析的基本思想:选择一个投影方向(线性变换,线性组合),将高维问题降低到一 ...

  9. Fisher线性判别 模式识别 例题

    ** Fisher线性判别 ** [例4-1]本程序为纸币100元A面与50元A 面的Fisher判别门限的程序,通过全局变量 dat自动从样本数据中将内容读入dat[10][4][8][8][60] ...

最新文章

  1. python turtle画气球-python windows下显示托盘区气球消息
  2. python与数学的故事_我与数学的故事作文800字
  3. 三角形带优化库nvtrisrip的使用
  4. foreach和IEnumerable+yield和IEnumerator
  5. 所有和Java中代理有关的知识点都在这了
  6. C#命名规范,SqlServer命名规范
  7. Python高级——迭代器与生成器
  8. 死锁的处理策略——避免死锁
  9. DevOps 和敏捷开发的区别是什么?
  10. join --- connet string
  11. 基于Axis1.4的webservice接口开发(环境搭建)
  12. C语言小案例_OA大典故障案例摘录【第1393篇】爱普生c5290 彩色喷墨打印机 打印横白道...
  13. 并查集(UnionFind)算法
  14. ps保存html和图像格式不显示,解决ps“储存为web和设备所用格式”灰色不能使用的方法...
  15. linux iso转换成img文件,Ubuntu下将img 转化成iso的号令[Linux安全]
  16. 千锋web前端教学知识点记录及个人理解2
  17. 加拿大办理电动自行车申请GCC认证
  18. DDoS 报告攻击类型占比
  19. 终身成长----“成长型思维”
  20. (个人解题思路系列)五子棋

热门文章

  1. cad渐开线齿轮轮廓绘制_CAD画齿轮的方法
  2. JAVA中用POI操作word
  3. 1526. N叉树的前序遍历
  4. 今日新闻快报 新闻快讯摘要10条
  5. android 计算器,Android实战:计算器
  6. excel单元格下拉选项怎么设置_单元格下拉效果怎么实现?
  7. YOLOv5电车识别 电瓶车识别
  8. 尝试在blender中渲染一个最简单的动画
  9. GnuTLS error -12: A TLS fatal alert has been received.
  10. 美国CN2服务器推荐:RAKsmart电信Cn2 GIA直连服务器