文章首发及后续更新:https://mwhls.top/1996.html
新的更新内容请到mwhls.top查看。
无图/无目录/格式错误/更多相关请到上方的文章首发页面查看。

Github链接:https://github.com/asd123pwj/pattern-recognition

LDA: Linear Discriminant Analysis
QDA: Quadratic Discriminant Analysis

需求

  • python环境
  • numpy库
  • sklearn库 - 使用pip install -U scikit-learn安装
    • sklearn官网:https://scikit-learn.org/stable/modules/classes.html
  • 数据集 - http://archive.ics.uci.edu/ml/datasets.php:

数据集

Dataset #class #feature #train #test
Letter 26 16 16000 4000
Opt-digits 10 64 3823 1797
Statlog-Satimage 6 36 4435 2000
Vowel 11 10 528 462

结果

  • 下面的警告,好像是因为数据集太过离散导致的,表示这个分类器对这份数据不准确,最好换个。

代码

# 使用pip install -U scikit-learn 安装sklearn库
# 使用pip install numpy安装numpy库(可能内置)
# QDA与LDA库:
# https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysisimport numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA, QuadraticDiscriminantAnalysis as QDAdef get_list_letter(char, features, path):with open(path, 'r') as letter_train:content_letter_train = letter_train.readlines()for line in content_letter_train:temp = line.split(',')temp[-1] = list(temp[-1])[0]char.append(temp[0])features.append((temp[1::]))def get_list_optdigits(dig, features, path):with open(path, 'r') as dig_train:content_dig_train = dig_train.readlines()for line in content_dig_train:temp = line.split(',')temp[-1] = list(temp[-1])[0]dig.append(temp[-1])features.append((temp[0:len(temp)-1:]))def get_list_sat(sat, features, path):with open(path, 'r') as sat_train:content_sat_train = sat_train.readlines()for line in content_sat_train:temp = line.split(' ')temp[-1] = list(temp[-1])[0]sat.append(temp[-1])features.append((temp[0:len(temp)-1:]))def get_list_vowel(vowel, features, path):with open(path, 'r') as vowel_train:content_vowel_train = vowel_train.readlines()for line in content_vowel_train:temp = line.split()temp[-1] = list(temp[-1])[0]vowel.append(temp[-1])features.append((temp[3:len(temp)-1:]))def train_and_test(train_result, fetures_list, test_list, analysis_method):letter_x = np.array(fetures_list)letter_y = np.array(train_result)if analysis_method == "LDA":clf = LDA()elif analysis_method == "QDA":clf = QDA()else:print("错误的分类方法名。")return -1clf.fit(letter_x, letter_y)return list(clf.predict(test_list))def convert_int(str_list):for row in range(0, len(str_list)):for col in range(0, len(str_list[row])):str_list[row][col] = int(str_list[row][col])def convert_float(str_list):for row in range(0, len(str_list)):for col in range(0, len(str_list[row])):str_list[row][col] = float(str_list[row][col])def analysis_accuracy(judge_result, test_char):sum = 0right_num = 0for pos in range(0, len(judge_result)):sum += 1if judge_result[pos] == test_char[pos]:right_num += 1return right_num / sum# letter数据集初始化
letter_train_path = './dataset/letter.train'
letter_train_class = []
letter_train_features = []
letter_test_path = './dataset/letter.test'
letter_test_class = []
letter_test_features = []
get_list_letter(letter_train_class, letter_train_features, letter_train_path)
get_list_letter(letter_test_class, letter_test_features, letter_test_path)
convert_int(letter_train_features)
convert_int(letter_test_features)
# Letter数据集学习
letter_LDA_judge_result = train_and_test(letter_train_class, letter_train_features, letter_test_features, "LDA")
letter_LDA_judge_accuracy = analysis_accuracy(letter_LDA_judge_result, letter_test_class)
print('使用LDA对letter的', len(letter_train_features), '份数据学习后,对',len(letter_test_features), '份测试数据分类的准确率为:', letter_LDA_judge_accuracy)
letter_QDA_judge_result = train_and_test(letter_train_class, letter_train_features, letter_test_features, "QDA")
letter_QDA_judge_accuracy = analysis_accuracy(letter_QDA_judge_result, letter_test_class)
print('使用QDA对letter的', len(letter_train_features), '份数据学习后,对',len(letter_test_features), '份测试数据分类的准确率为:', letter_QDA_judge_accuracy)# optdigits数据集初始化
optdigits_train_path = './dataset/optdigits.train'
optdigits_train_class = []
optdigits_train_features = []
optdigits_test_path = './dataset/optdigits.test'
optdigits_test_class = []
optdigits_test_features = []
get_list_optdigits(optdigits_train_class, optdigits_train_features, optdigits_train_path)
convert_int(optdigits_train_features)
get_list_optdigits(optdigits_test_class, optdigits_test_features, optdigits_test_path)
convert_int(optdigits_test_features)
# optdigits数据集学习
optdigits_LDA_judge_result = train_and_test(optdigits_train_class, optdigits_train_features, optdigits_test_features, "LDA")
optdigits_LDA_judge_accuracy = analysis_accuracy(optdigits_LDA_judge_result, optdigits_test_class)
print('使用LDA对optdigits的', len(optdigits_train_features), '份数据学习后,对',len(optdigits_test_features), '份测试数据分类的准确率为:', optdigits_LDA_judge_accuracy)
optdigits_QDA_judge_result = train_and_test(optdigits_train_class, optdigits_train_features, optdigits_test_features, "QDA")
optdigits_QDA_judge_accuracy = analysis_accuracy(optdigits_QDA_judge_result, optdigits_test_class)
print('使用QDA对optdigits的', len(optdigits_train_features), '份数据学习后,对',len(optdigits_test_features), '份测试数据分类的准确率为:', optdigits_QDA_judge_accuracy)# sat数据集初始化
sat_train_path = './dataset/sat.train'
sat_train_class = []
sat_train_features = []
sat_test_path = './dataset/sat.test'
sat_test_class = []
sat_test_features = []
get_list_sat(sat_train_class, sat_train_features, sat_train_path)
convert_int(sat_train_features)
get_list_sat(sat_test_class, sat_test_features, sat_test_path)
convert_int(sat_test_features)
# sat数据集学习
sat_LDA_judge_result = train_and_test(sat_train_class, sat_train_features, sat_test_features, "LDA")
sat_LDA_judge_accuracy = analysis_accuracy(sat_LDA_judge_result, sat_test_class)
print('使用LDA对sat的', len(sat_train_features), '份数据学习后,对',len(sat_test_features), '份测试数据分类的准确率为:', sat_LDA_judge_accuracy)
sat_QDA_judge_result = train_and_test(sat_train_class, sat_train_features, sat_test_features, "QDA")
sat_QDA_judge_accuracy = analysis_accuracy(sat_QDA_judge_result, sat_test_class)
print('使用QDA对sat的', len(sat_train_features), '份数据学习后,对',len(sat_test_features), '份测试数据分类的准确率为:', sat_QDA_judge_accuracy)# vowel数据集初始化
vowel_train_path = './dataset/vowel.train'
vowel_train_class = []
vowel_train_features = []
vowel_test_path = './dataset/vowel.test'
vowel_test_class = []
vowel_test_features = []
get_list_vowel(vowel_train_class, vowel_train_features, vowel_train_path)
convert_float(vowel_train_features)
get_list_vowel(vowel_test_class, vowel_test_features, vowel_test_path)
convert_float(vowel_test_features)
# vowel数据集学习
vowel_LDA_judge_result = train_and_test(vowel_train_class, vowel_train_features, vowel_test_features, "LDA")
vowel_LDA_judge_accuracy = analysis_accuracy(vowel_LDA_judge_result, vowel_test_class)
print('使用LDA对vowel的', len(vowel_train_features), '份数据学习后,对',len(vowel_test_features), '份测试数据分类的准确率为:', vowel_LDA_judge_accuracy)
vowel_QDA_judge_result = train_and_test(vowel_train_class, vowel_train_features, vowel_test_features, "QDA")
vowel_QDA_judge_accuracy = analysis_accuracy(vowel_QDA_judge_result, vowel_test_class)
print('使用QDA对vowel的', len(vowel_train_features), '份数据学习后,对',len(vowel_test_features), '份测试数据分类的准确率为:', vowel_QDA_judge_accuracy)

LDA与QDA分类数据的简单应用(python)相关推荐

  1. 【手把手教你】使用Logistic回归、LDA和QDA模型预测指数涨跌

    1 引言 机器学习(Machine Learning)是人工智能(AI)的重要组成部分,目前已广泛应用于数据挖掘.自然语言处理.信用卡欺诈检测.证券市场分析等领域.量化投资作为机器学习在投资领域内最典 ...

  2. LDA、QDA和朴素贝叶斯

    文章目录 一.Linear Discriminant Analysis(LDA) 1. 贝叶斯定理 2. LDA (p = 1) 3. LDA(p > 1) 4. 结果衡量--混淆矩阵.ROC. ...

  3. Python手写实现LDA与QDA算法

    Python手写实现LDA与QDA算法 简略版 LDA QDA 完整版 LDA QDA 对IRIS数据集进行实验 近期实验室在上一门机器学习的讨论班,第一次作业中有一道题要求实现LDA算法与QDA算法 ...

  4. 机器学习算法(九): 基于线性判别LDA模型的分类(基于LDA手写数字分类实践)

    机器学习算法(九): 基于线性判别模型的分类 1.前言:LDA算法简介和应用 1.1.算法简介 线性判别模型(LDA)在模式识别领域(比如人脸识别等图形图像识别领域)中有非常广泛的应用.LDA是一种监 ...

  5. 使用多级分组报表展现分类数据

    使用多级分组报表展现分类数据 当你走进便利店,你会发现所有的商品都是按类排放的,分类排放可以帮助您快速找到同类商品,也可以快速发现你想要的商品. 当去饭店吃饭的时候,菜单上的菜也是按类别排列的,比如凉 ...

  6. 分类数据的分析-卡方检验运用

    概念 分类数据 观测值只能被分为几个类别中的某一类,如某个公民的国籍,也称定性数据. 多项试验 当分类数据只涉及到两个响应结果(是或不是,成功或失败等等),就是一个二项分布.如果分类数据涉及到两个以上 ...

  7. mysql8审计_审计对存储在MySQL 8.0中的分类数据的更改

    作者:Mike Frank  译:徐轶韬 面临的挑战 使用敏感信息时您需要拥有审计日志.通常,此类数据将包含一个分类级别作为行的一部分,定义如何处理.审计等策略.在之前的博客中,我讨论了如何审计分类数 ...

  8. python分类时特征选择_关于python:是否有可用于分类数据输入的特征选择算法?...

    我正在训练一个具有10个左右分类输入的神经网络. 在对这些分类输入进行一次热编码之后,我最终将大约500个输入馈入网络. 我希望能够确定我每个分类输入的重要性. Scikit-learn具有许多功能重 ...

  9. 审计MySQL 8.0中的分类数据查询

    面临的挑战 通常,涉及到敏感信息时用户需要使用审计日志.不仅仅是在表上运行Select,还包括访问表中的特定单元格.通常,这类数据将包含一个分类级别作为行的一部分,定义如何处理.审计等策略. 诸如此类 ...

最新文章

  1. ashx文件和HttpHandler
  2. 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题
  3. php thikn_与ThinkPHP等框架结合
  4. python 字典排序 lambda_Python使用lambda表达式对字典排序操作示例
  5. 为什么用Ghost备份后会有两个文件?
  6. HTML_DOM学习
  7. 拖链电缆 机器人电缆_展商推介丨广州兰普电缆提供销售高柔拖链电缆、机器人电缆、控制软电缆及信号屏蔽电缆...
  8. Python学习笔记(语句)
  9. web xml配置oracle数据源_SpringBoot2 整合JTA组件,多数据源事务管理
  10. F2FS源码分析-1.1 [F2FS 元数据布局部分] F2FS文件系统的总体结构
  11. 消息中间件TongLinkQ(TLQ)使用总结——记那几天趟过的坑
  12. 毕业设计-基于微信小程序的“掌上实验室” 安全教育与管理系统
  13. Hadoop生态系统——HiveQL操作实战
  14. 工业物联网的数据集成
  15. 3.Spark的安装(华为云学习笔记,Spark编程基础,大数据)
  16. 8个好玩又实用的神奇网站,帮你打开新世界大门!
  17. 职场吐槽大会,原来办公软件也有如此多神技能?
  18. 开源工具:OpenPR
  19. 《C++语言基础》实践参考——考了语文数学的学生
  20. live555作为RTSP流媒体服务器RTSPServer时解决对接海康NVR时G711音频不能正常播放的问题

热门文章

  1. Xcode遇到couldn’t be opened because you don’t have permission to view it.解决方法
  2. 华二紫竹2021年高考成绩查询,2019年华二紫竹升学数据分析!
  3. 手持gps坐标设置_学术 | 许其凤院士:GPS移动定位与移动网络定位精度的分析
  4. 知家发布国内首个DTC白皮书,小仙炖创始人、五菱高管为其助威
  5. VS2005 编译器选项
  6. 【Google Play】创建和管理内部测试版本 ( 创建内部测试版本 | 检查并发布内部测试版本 )
  7. 【中级软考】cache是什么?(高速缓冲存储器)
  8. 计算机策略更新失败用户策略更新失败,升级更新win10遇到错误代码8024000B的两种解决办法...
  9. verilog自学笔记
  10. Comet OJ 夏季欢乐赛 Gree的心房