LAD线性判别分析鸢尾花预测

文章目录

  • LAD线性判别分析鸢尾花预测
    • 数学原理
  • 代码实现

数学原理

代码实现

数据集下载链接:https://www.kaggle.com/uciml/iris/download

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : LDA.py
# @Author: Gowi
# @Date  : 2021/3/25
# @Desc  :import pandas as pd
import numpy as np# 计算协方差矩阵
def Sigma(Iris, u):s = np.zeros((4, 4))for i in range(30):a = Iris[i, :] - ua = np.array([a])s = s + np.dot(a.T, a)return sdef predict(Iris_test):num1, num2, num3 = 0, 0, 0for i in range(20):acc1, acc2, acc3 = 0, 0, 0U12_test = np.dot(W12.T, Iris_test[i])U13_test = np.dot(W13.T, Iris_test[i])U23_test = np.dot(W23.T, Iris_test[i])if np.abs(U12_test - U12_1) < np.abs(U12_test - U12_2):acc1 += 1else:acc2 += 1if np.abs(U13_test - U13_1) < np.abs(U13_test - U13_2):acc1 += 1else:acc3 += 1if np.abs(U23_test - U23_1) < np.abs(U23_test - U23_2):acc2 += 1else:acc3 += 1acc = max(acc1, acc2, acc3)if acc == acc1:num1 += 1elif acc == acc2:num2 += 1else:num3 += 1return num1, num2, num3# 读取数据集
df = pd.read_csv(r"Iris.csv", header=None)
# 拆分数据集
Iris1_train = df.values[1:31, 1:5]
Iris2_train = df.values[51:81, 1:5]
Iris3_train = df.values[101:131, 1:5]
Iris1_test = df.values[31:51, 1:5]
Iris2_test = df.values[81:101, 1:5]
Iris3_test = df.values[131:151, 1:5]
# 鸢尾花的类别
Iris1_class = 'Iris-setosa'
Iris2_class = 'Iris-versicolor'
Iris3_class = 'Iris-virginica'
# 转换为float
Iris1_train = Iris1_train.astype(np.float)
Iris2_train = Iris2_train.astype(np.float)
Iris3_train = Iris3_train.astype(np.float)
Iris1_test = Iris1_test.astype(np.float)
Iris2_test = Iris2_test.astype(np.float)
Iris3_test = Iris3_test.astype(np.float)
# 均值向量
u1 = np.mean(Iris1_train, axis=0)
u2 = np.mean(Iris2_train, axis=0)
u3 = np.mean(Iris3_train, axis=0)
print("均值向量u1")
print(u1)
# 协方差矩阵
sigma1 = Sigma(Iris1_train, u1)
sigma2 = Sigma(Iris2_train, u2)
sigma3 = Sigma(Iris3_train, u3)
print("类内散度矩阵sigma1")
print(sigma1)
# 类内散度矩阵
Sw12 = sigma1 + sigma2
Sw13 = sigma1 + sigma3
Sw23 = sigma2 + sigma2
print("类内散度矩阵Sw12")
print(Sw12)
# 类间散度矩阵
Sb12 = np.dot(np.array(u1 - u2), np.array(u1 - u2).T)
Sb13 = np.dot(np.array(u1 - u3), np.array(u1 - u3).T)
Sb23 = np.dot(np.array(u2 - u3), np.array(u2 - u3).T)
# 斜率
W12 = np.dot(np.linalg.inv(Sw12), (u1 - u2))
W13 = np.dot(np.linalg.inv(Sw13), (u1 - u3))
W23 = np.dot(np.linalg.inv(Sw23), (u2 - u3))
print("斜率W12")
print(W12)
# 投影后的均值点
U12_1 = np.dot(W12.T, u1)
U12_2 = np.dot(W12.T, u2)
U13_1 = np.dot(W13.T, u1)
U13_2 = np.dot(W13.T, u2)
U23_1 = np.dot(W23.T, u2)
U23_2 = np.dot(W23.T, u3)
print("投影后的均值点U12_1")
print(U12_1)
# 预测Iris
predict_1, _, _ = predict(Iris1_test)
print("判断为" + Iris1_class + "的个数")
print(predict_1)
_, predict_2, _ = predict(Iris2_test)
print("判断为" + Iris2_class + "的个数")
print(predict_2)
_, _, predict_3 = predict(Iris3_test)
print("判断为" + Iris3_class + "的个数")
print(predict_3)
print("准确率为")
print((predict_1 + predict_2 + predict_3) / 60 * 100, "%")

LAD线性判别分析鸢尾花预测相关推荐

  1. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题

    本文设计并实现了PerceptronLA.PseudoIA.LeastSM.LinearDA.KNN等五个算法类,以及DataProcessor的数据处理类.对感知器算法LDA.最小二乘法LSM的伪逆 ...

  2. ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)

    ML:基于自定义数据集利用Logistic.梯度下降算法GD.LoR逻辑回归.Perceptron感知器.支持向量机(SVM_Linear.SVM_Rbf).LDA线性判别分析算法进行二分类预测(决策 ...

  3. ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测

    ML之NB:基于news新闻文本数据集利用纯统计法.kNN.朴素贝叶斯(高斯/多元伯努利/多项式).线性判别分析LDA.感知器等算法实现文本分类预测 目录 基于news新闻文本数据集利用纯统计法.kN ...

  4. 机器学习(三):一文读懂线性判别分析(LDA)

    一.什么是线性判别分析? 线性判别分析(Linear Discriminant Analysis,LDA)的一种经典的线性学习方法(属于监督学习),这里先借用周志华教授的<机器学习>中的图 ...

  5. R 实现线性判别分析教程

    本文介绍线性判别分析概念,并通过示例介绍R的实现过程. 介绍线性判别分析模型 线性判别分析用于基于一组变量把响应变量分为俩类或更多的算法.但线性判别算法对数据有一些要求: 响应变量必须是类别变量.线性 ...

  6. Fisher线性判别分析原理解析及其Python程序实现两例

    一.Fisher线性判别分析原理解析与算法描述 Fisher:1890-1962, 英国数学家,生物学家,现代统计学奠基人之一,证明了孟德尔的遗传律符合达尔文的进化论. Fisher线性判别分析(Li ...

  7. 线性判别分析法(LDA)

    在主成分分析法(PCA)中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结.LDA ...

  8. 机器学习——线性判别分析

    目录 线性判别分析 LDA的降维过程 案例:鸢尾花(Iris) 代码演示 数据集 局部线性嵌入 线性判别分析 线性判别分析(LDA)是一种有监督的线性降维算法.与PCA不同,LDA是为了使降维后的数据 ...

  9. 线性判别分析(LDA)原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:机器学习算法那些事 前言 线性判别分析(Linear D ...

最新文章

  1. HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的
  2. 什么是Java对象分配率?
  3. 自动化测试工具selenium python_自动化测试工具之Selenium(一)-----Selenium的介绍以及安装...
  4. 幂等校验是什么意思_阿里面试官:接口的幂等性怎么设计?
  5. iOS开发蓝牙 蓝牙4.0的各种踩过的坑,希望你们少踩点
  6. Android之XUtils的框架总结
  7. Abstract Self-Balancing Binary Search Tree
  8. trace java_使用java动态字节码技术简单实现arthas的trace功能。
  9. 一看就会之—利用IIS服务发布网站(实践篇)上
  10. flask-前端-requests之response对应关系 text
  11. 挑战Textarea——把textarea中的HTML写入数据库
  12. QT中PRO文件写法
  13. mysql 61错误解决方法
  14. 称重传感器并联后的误差及附加误差
  15. gdb官方说明文档中文版
  16. (译)使用cocos2d和box2d制作滚动背景
  17. python微博接口_python调用微博api接口
  18. 4-17 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试类,进行测试。
  19. 服务器和网站APP为什么会被反复入侵
  20. php防刷红包,PHP防止多次请求刷红包的方法

热门文章

  1. 转铁蛋白Tf功能化β-榄香烯-雷公藤红素/紫杉醇PLGA纳米粒/雷公藤甲素脂质体(化学试剂)
  2. 基于华为WAC双机VRRP热备份下旁挂三层组网隧道转发模式解决方案
  3. 记一次关于App页面响应时间的测试
  4. 【科普贴】SD卡接口协议详解
  5. 总结:K8s之HPA
  6. [转载] 中华典故故事(孙刚)——30 千里马常有_而伯乐不常有
  7. CUDA编程学习0——环境搭建环境详解
  8. 干货 | Elasticsearch 8.X 节点角色划分深入详解
  9. 51单片机频率计c语言程序,51单片机简易频率计源代码
  10. SpringMVC整合Redis实战