【回眸】LDA算法(数据处理与智能决策)

2024-04-02 21:08

本文主要是介绍【回眸】LDA算法(数据处理与智能决策),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

今天的数据处理与智能决策的作业需要用到LDA算法,接下来简单注释一下LDA算法的代码。

LDA算法的代码

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDAfeature_dict = {i: label for i, label in zip(range(4),("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width",))}
# print(feature_dict)  # {0: 'Sepal.Length', 1: 'Sepal.Width', 2: 'Petal.Length', 3: 'Petal.Width'}df = pd.read_csv('iris.csv', sep=',')
df.columns = ["Number"] + [l for i, l in sorted(feature_dict.items())] + ['Species']
# to drop the empty line at file-end
df.dropna(how='all', inplace=True)
# print(df.tail())  # 打印数据的后五个,和 .head() 是对应的X = df[["Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"]].values
y = df['Species'].values
enc = LabelEncoder()
label_encoder = enc.fit(y)
y = label_encoder.transform(y) + 1label_dict = {1: 'setosa', 2: 'versicolor', 3: 'virginica'}np.set_printoptions(precision=4)
mean_vectors = []
for c1 in range(1, 4):mean_vectors.append(np.mean(X[y == c1], axis=0))# print('Mean Vector class %s : %s\n' % (c1, mean_vectors[c1 - 1]))
S_W = np.zeros((4, 4))
for c1, mv in zip(range(1, 4), mean_vectors):# scatter matrix for every classclass_sc_mat = np.zeros((4, 4))for row in X[y == c1]:# make column vectorsrow, mv = row.reshape(4, 1), mv.reshape(4, 1)class_sc_mat += (row - mv).dot((row - mv).T)# sum class scatter metricesS_W += class_sc_mat
# print('within-class Scatter Matrix:\n', S_W)
overall_mean = np.mean(X, axis=0)
S_B = np.zeros((4, 4))
for i, mean_vec in enumerate(mean_vectors):n = X[y == i + 1, :].shape[0]# make column vectormean_vec = mean_vec.reshape(4, 1)# make column vectoroverall_mean = overall_mean.reshape(4, 1)S_B += n * (mean_vec - overall_mean).dot((mean_vec - overall_mean).T)
# print('between-class Scatter matrix:\n', S_B)eig_vals, eig_vecs = np.linalg.eig(np.linalg.inv(S_W).dot(S_B))for i in range(len(eig_vals)):eigvec_sc = eig_vecs[:, i].reshape(4, 1)# print('\n Eigenvector {}: \n {}'.format(i+1, eigvec_sc.real))# print('Eigenvalue {: }: {:.2e}'.format(i+1, eig_vals[i].real))# make a list of (eigenvalue, eigenvector) tuples
eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:, i]) for i in range(len(eig_vals))]# sort the (eigenvalue, eigenvector) tuples from high to low
eig_pairs = sorted(eig_pairs, key=lambda k: k[0], reverse=True)# Visually cinfirm that the list is correctly sorted by decreasing eigenvalues
print('Eigenvalues in decreasing order: \n')
for i in eig_pairs:print(i[0])print('Variance explained:\n')
eigv_sum = sum(eig_vals)
for i, j in enumerate(eig_pairs):print('eigenvalue {0:}: {1:.2%}'.format(i + 1, (j[0] / eigv_sum).real))W = np.hstack((eig_pairs[0][1].reshape(4, 1), eig_pairs[1][1].reshape(4, 1)))
print('Matrix W: \n', W.real)X_lda = X.dot(W)
assert X_lda.shape == (150, 2), 'The matrix is not 150*2 dimensional.'def plt_step_lda():ax = plt.subplot(111)for label, marker, color in zip(range(1, 4), ('^', 's', 'o'), ('blue', 'red', 'green')):plt.scatter(x=X_lda[:, 0].real[y == label],y=X_lda[:, 1].real[y == label],marker=marker,color=color,alpha=0.5,label=label_dict[label])plt.xlabel('LD1')plt.ylabel('LD2')leg = plt.legend(loc='upper right', fancybox=True)leg.get_frame().set_alpha(0.5)plt.title('LDA: Iris projection onto the first 2 linear discriminants')# hide axis ticksplt.tick_params(axis='both', which='both', bottom='off',top='off', labelbottom='on', left='off',labelleft='on')# remove axis spinesax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['bottom'].set_visible(False)ax.spines['left'].set_visible(False)plt.grid()plt.tight_layout()plt.show()
#这里生成一个图
# plt_step_lda()# LDA
sklearn_lda = LDA(n_components=2)
X_lda_sklearn = sklearn_lda.fit_transform(X, y)def plot_scikit_lda(X, title):ax = plt.subplot(111)for label, marker, color in zip(range(1, 4), ('^', 's', 'o'), ('blue', 'red', 'green')):plt.scatter(x=X_lda[:, 0].real[y == label],# flip the figurey=X_lda[:, 1].real[y == label] * -1,marker=marker,color=color,alpha=0.5,label=label_dict[label])plt.xlabel('LD1')plt.ylabel('LD2')leg = plt.legend(loc='upper right', fancybox=True)leg.get_frame().set_alpha(0.5)plt.title(title)# hide axis ticksplt.tick_params(axis='both', which='both', bottom='off',top='off', labelbottom='on', left='off',labelleft='on')# remove axis spinesax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)ax.spines['bottom'].set_visible(False)ax.spines['left'].set_visible(False)plt.grid()plt.tight_layout()plt.show()
#这里也生成一个图
plot_scikit_lda(X, title='Default LDA via scikit-learn')
首先导入包
其次打印 三个类别,四个特征  均值分别如下:
Mean Vector class 1 : [5.006 3.428 1.462 0.246]
Mean Vector class 2 : [5.936 2.77  4.26  1.326]
Mean Vector class 3 : [6.588 2.974 5.552 2.026]

生成的图放在下面了:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
明天不见不散(^-^)V

这篇关于【回眸】LDA算法(数据处理与智能决策)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871064

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各