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

2023-09-21 21:39:14

        线性判别分析((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 2
 1 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 2
 1 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()

更多推荐

hive中的索引

使用索引前的配置在使用Hive索引之前,需要进行一些配置,以确保索引能够正常工作。以下是一些常见的配置步骤:Hive配置在Hive中启用索引功能,需要在Hive配置文件(hive-site.xml)中设置以下属性:<property><name>hive.index.compact.file.uris</name><v

【日记】文章更新计划

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top文章最后有详细的更新计划{%timeline2023,pink%}第一版发布【完结~开发规范系列】Linux系列重新定位,不再只是简单的说常用命令周二rocketmq更换为nginx系列微服务内容变

好用的一站式MES系统有哪些?全面管理生产流程,实现工厂数字化转型

在现代制造业中,MES制造执行系统已经成为了不可或缺的信息化工具。它为企业建立了规范化、集成化的生产信息管理平台,通过集成管理思想,帮助企业优化流程管控、数字化生产车间,从而显著提升了生产效率。那么,MES系统到底可以为企业解决哪些问题呢?2023年制造工厂生产管理现状信息化现状:许多企业使用ERP系统来管理业务流程,

操作系统权限提升(二十七)之数据库提权-MySQL MOF提权

MySQLMOF提权MOF介绍mof是windows系统的一个“托管对象格式”文件(位置:C:/windows/system32/wbem/mof/),其作用是每隔五秒就会去监控进程创建和死亡,mof目录下有两个文件夹(good与bad)。Windowsserver2003及以下系统每5秒会执行一次mof目录下的文件,

百度SEO不稳定的原因及解决方法(百度SEO不稳定因素的5大包括)

百度SEO优化不稳定介绍:蘑菇号-www.mooogu.cn随着百度SEO算法的不断变化和升级,许多网站的SEO排名经常出现不稳定的情况,这种情况在一定程度上影响了网站的流量和排名,导致网站的质量评分降低。因此,深入分析百度SEO不稳定的原因和解决方法非常必要。百度SEO不稳定因素的5大包括:1.网站内容和质量不佳,没

day06_Java中的流程控制语句

流程控制简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。流程控制语句分为:顺序结构丶分支结构(if,switch)丶循环结构(for,whi

SpringMvc决战-【SpringMVC之自定义注解】

目录一、前言1.1.什么是注解1.2.注解的用处1.3.注解的原理二.注解父类1.注解包括那些2.JDK基本注解3.JDK元注解4.自定义注解5.如何使用自定义注解(包括:注解标记【没有任何东西】,元数据注解)?三.实例展示1.案例一(获取类与方法上的注解值)1.1导入一个类用于创造实例1.2导入三个注解1.3导入测试

CSAPP的Lab学习——CacheLab

文章目录前言一、A部分:编写一个高速缓存模拟器构造高速缓冲行结构仿写主函数,使用getopt()函数分配空间并释放读取给的trace文件模拟cache行为二、B部分:优化矩阵转置32*32矩阵转置64*64矩阵转置61*67矩阵转置总结前言一个本硕双非的小菜鸡,备战24年秋招。刚刚看完CSAPP,真是一本神书啊!遂尝试

MyBatis友人帐之ResultMap及分页

一、ResultMap1.1查询为null问题要解决的问题:属性名和字段名不一致解决方案方案一:为列名指定别名,别名和java实体类的属性名一致.<selectid="selectUserById"resultType="User">selectid,name,pwdaspasswordfromuserwhereid=

OpenCV自学笔记十七:傅里叶变换

1、Numpy实现傅里叶变换傅里叶变换(FourierTransform)是一种将信号从时域转换到频域的数学变换。它将一个连续或离散的时域信号分解为一组正弦和余弦函数的复合。在Python中,可以使用NumPy库来实现傅里叶变换。具体步骤如下:1.导入NumPy库:importnumpyasnp2.准备输入信号数据,可

9月21日,每日信息差

今天是2023年9月21日,以下是为您准备的14条信息差第一、谷歌高管已经广泛讨论了在2027年之前将博通作为人工智能芯片供应商的可能性第二、清华系团队宣布研发出千亿参数“制药版ChatGPT”,覆盖药物立项、临床前研究、临床试验的各阶段,作为制药专家的得力AI助手,提升药物研发效率。团队还发布了全球首个千亿参数多模态

热文推荐