当前位置: 首页 > news >正文

使用LDA(线性判别公式)进行iris鸢尾花的分类

        线性判别分析((Linear Discriminant Analysis ,简称 LDA)是一种经典的线性学习方法,在二分类问题上因为最早由 [Fisher,1936] 提出,亦称 ”Fisher 判别分析“。并且LDA也是一种监督学习的降维技术,也就是说它的数据集的每个样本都有类别输出。这点与主成分和因子分析不同,因为它们是不考虑样本类别的无监督降维技术。

        LDA 的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,使得同样样例的投影尽可能接近、异样样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。其实可以用一句话概括:就是“投影后类内方差最小,类间方差最大”。
鸢尾花简介

iris数据集的中文名是安德森鸢尾花卉数据集,英文全称是Anderson’s Iris data set。iris包含150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,所以iris数据集是一个150行5列的二维表。

通俗地说,iris数据集是用来给花做分类的数据集,每个样本包含了花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征(前4列),我们需要建立一个分类器,分类器可以通过样本的四个特征来判断样本属于山鸢尾、变色鸢尾还是维吉尼亚鸢尾(这三个名词都是花的品种)。

iris的每个样本都包含了品种信息,即目标属性(第5列,也叫target或label)。

代码

#首先导入相关库
import sklearn
from sklearn.datasets import load_iris
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
#再进行数据的划分
data = load_iris(return_X_y=True)
x,y = data
#print(x)
#print(y)
#分割训练集和测试集
train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3)
print(train_x.shape)
print(test_x.shape)
#进行训练
LDA = LinearDiscriminantAnalysis()
LDA.fit(train_x,train_y)
y_predict = LDA.predict(test_x)
print(test_y)
print(y_predict)

相关输出如下

[2 1 2 1 0 2 2 0 2 0 1 2 1 0 1 0 0 0 0 2 2 1 2 1 0 1 1 2 2 0 2 1 2 0 2 1 21 0 2 0 0 1 0 2]
[2 1 2 1 0 2 2 0 2 0 1 2 1 0 1 0 0 0 0 2 2 1 2 1 0 1 1 2 2 0 2 1 2 0 2 1 21 0 2 0 0 1 0 2]
#计算预测正确率
j = 0
for i in range(len(test_y)):if test_y[i] == y_predict[i]:j = j + 1
print(j)
print(j/len(y_predict))

画图部分

#由于是按照萼片长度宽度计算,所以将萼片长宽与相应的类别组合成新的列表
total_sepal = []
for i in range(x.shape[0]):sepal = []sepal.append(x[i][0])sepal.append(x[i][1])sepal.append(y[i])total_sepal.append(sepal)
print(total_sepal)
#画图
for i in range(x.shape[0]):if(total_sepal[i][2] == 0):plt.scatter(total_sepal[i][0], total_sepal[i][1], color='blue')if(total_sepal[i][2] == 1):plt.scatter(total_sepal[i][0], total_sepal[i][1], color='red')if(total_sepal[i][2] == 2):plt.scatter(total_sepal[i][0], total_sepal[i][1], color='green')
plt.show()

http://www.lryc.cn/news/178431.html

相关文章:

  • 王学岗生成泛型的简易Builder
  • kafka消息队列简单使用
  • 性能优化实战使用CountDownLatch
  • 基于视频技术与AI检测算法的体育场馆远程视频智能化监控方案
  • leetcodetop100(29) K 个一组翻转链表
  • 最新影视视频微信小程序源码-带支付和采集功能/微信小程序影视源码PHP(更新)
  • C++:vector 定义,用法,作用,注意点
  • Firecamp2.7.1exe安装与工具调试向后端发送SocketIO请求
  • MySQL到TiDB:Hive Metastore横向扩展之路
  • 算法通关村-----寻找祖先问题
  • Sentinel结合Nacos实现配置持久化(全面)
  • Verilog中什么是断言?
  • Oracle分区的使用详解:创建、修改和删除分区,处理分区已满或不存在的插入数据,以及分区历史数据与近期数据的操作指南
  • SLAM从入门到精通(amcl定位使用)
  • 【C/C++】C/C++面试八股
  • Scala第八章节
  • k8s-实战——kubeadm二进制编译
  • vite 和 webpack 的区别
  • 传统遗产与技术相遇,古彝文的数字化与保护
  • 多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制)
  • 1042 字符统计
  • 3 OpenCV两张图片实现稀疏点云的生成
  • 在Springboot项目中使用Redis提供给Lua的脚本
  • 分类预测 | MATLAB实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测
  • Linux或Centos查看CPU和内存占用情况_top只能查看对应的命令_如何查看具体进程---linux工作笔记062
  • 什么是DevOps
  • 力扣每日一题
  • 测试OpenCvSharp库的模板匹配功能
  • 网络编程day04(网络属性函数、广播、组播、TCP并发)
  • HALCON支持GPU加速的算子有哪些?