营销型网站建设需要注意什么,给别人建设网站的注意事项,wordpress缩略图的质量,南京玄武区建设局网站文章目录 1 前言1.1 线性判别模型的介绍1.2 线性判别模型的应用 2 demo数据演示2.1 导入函数2.2 训练模型2.3 预测模型 3 LDA手写数字数据演示3.1 导入函数3.2 导入数据3.3 输出图像3.4 建立模型3.5 预测模型 4 讨论 1 前言
1.1 线性判别模型的介绍
线性判别模型#xff08;… 文章目录 1 前言1.1 线性判别模型的介绍1.2 线性判别模型的应用 2 demo数据演示2.1 导入函数2.2 训练模型2.3 预测模型 3 LDA手写数字数据演示3.1 导入函数3.2 导入数据3.3 输出图像3.4 建立模型3.5 预测模型 4 讨论 1 前言
1.1 线性判别模型的介绍
线性判别模型Linear Discriminant AnalysisLDA是一种经典的监督学习算法它旨在通过学习输入特征和它们所属类别之间的线性关系来进行分类任务。线性判别模型通常可以被看作是一种分类器可以用于二元分类和多元分类问题。
线性判别模型的主要思想是将输入特征空间中的样本投影到一条直线或者一个超平面上从而实现对样本的分类。这个超平面的选择是通过最小化类内距离和最大化类间距离来完成的。类内距离指的是同一类别样本之间的距离类间距离则指不同类别样本之间的距离。通过最小化类内距离和最大化类间距离线性判别模型能够更好地区分不同类别的样本。
优点 线性判别模型是一种经典的监督学习算法具有较高的可解释性和可理解性能够提供直观的结果。 线性判别模型具有较快的训练速度和较低的存储成本适用于处理大型数据集。 线性判别模型能够在高维数据中很好地工作并且在特征选择方面具有很好的性能。
缺点 线性判别模型是一种线性模型对于非线性分类问题的表现可能较差。 线性判别模型对于噪声数据和异常值比较敏感容易造成误分类。 线性判别模型的分类效果受特征之间相关性的影响如果存在高度相关的特征分类效果可能较差。
1.2 线性判别模型的应用
线性判别模型广泛应用于数据分类、降维和特征提取等领域在实际应用中有很多场景例如 信用评分根据用户的个人信息和历史数据对其信用评分进行分类以决定是否批准贷款。 医学诊断根据患者的生理指标和症状将其分为健康和患病两类以进行诊断和治疗。 人脸识别根据人脸图像的特征向量将其分为不同的人脸类别以实现人脸识别和身份验证。 情感分析根据文本内容中的关键词和情感指标将其分为正面、负面和中性等不同的情感类别。 图像分类根据图像的特征向量将其分为不同的图像类别以进行图像识别和分类等。
在生信领域还是常用于基因表达数据分析、蛋白结构预测、biomarker鉴定和药物设计LDA可以用于分析分子结构和描述化学性质从而优化药物设计和发现。
2 demo数据演示
2.1 导入函数
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import make_classification2.2 训练模型
# 制作四个类别的数据每个类别100个样本
X, y make_classification(n_samples1000, n_features3, n_redundant0,n_classes4, n_informative2, n_clusters_per_class1,class_sep3, random_state10)
# 可视化分布
fig plt.figure()
ax Axes3D(fig, rect[0, 0, 1, 1], elev20, azim20,auto_add_to_figureFalse)
fig.add_axes(ax)
ax.scatter(X[:, 0], X[:, 1], X[:, 2], markero, cy)
plt.show()建模
# 建立 LDA 模型
lda LinearDiscriminantAnalysis()
# 训练模型
lda.fit(X, y)
# 查看 LDA 模型的参数
lda.get_params()2.3 预测模型
# 进行模型预测
X_new lda.transform(X)
# 可视化预测数据
plt.scatter(X_new[:, 0], X_new[:, 1], markero, cy)
plt.show()用新数据测试
a np.array([[-1, 0.1, 0.1]])
print(f{a} 类别是: , lda.predict(a))
print(f{a} 类别概率分别是: , lda.predict_proba(a))a np.array([[-12, -100, -91]])
print(f{a} 类别是: , lda.predict(a))
print(f{a} 类别概率分别是: , lda.predict_proba(a))a np.array([[-12, -0.1, -0.1]])
print(f{a} 类别是: , lda.predict(a))
print(f{a} 类别概率分别是: , lda.predict_proba(a))a np.array([[0.1, 90.1, 9.1]])
print(f{a} 类别是: , lda.predict(a))
print(f{a} 类别概率分别是: , lda.predict_proba(a))3 LDA手写数字数据演示
3.1 导入函数
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
import matplotlib3.2 导入数据
# 导入MNIST数据集
mnist load_digits()
# 查看数据集信息
print(The Mnist dataeset:\n,mnist)
# 分割数据为训练集和测试集,7/3分
x, test_x, y, test_y train_test_split(mnist.data, mnist.target, test_size0.3, random_state2)3.3 输出图像
images range(0,9)
plt.figure(dpi100)
for i in images:plt.subplot(330 1 i)plt.imshow(x[i].reshape(8, 8), cmap matplotlib.cm.binary,interpolationnearest)
# show the plotplt.show()3.4 建立模型
# 建立 LDA 模型
m_lda LinearDiscriminantAnalysis()
# 训练模型
m_lda.fit(x, y)
# 进行模型预测
x_new m_lda.transform(x)
# 可视化预测数据
plt.scatter(x_new[:, 0], x_new[:, 1], markero, cy)
plt.title(MNIST with LDA Model)
plt.show()3.5 预测模型
y_test_pred m_lda.predict(test_x)
print(测试集的真实标签:\n, test_y)
print(测试集的预测标签:\n, y_test_pred)# 统计结果指标
print(classification_report(test_y, y_test_pred))# 计算混淆矩阵
C2 confusion_matrix(test_y, y_test_pred)
# 打混淆矩阵
print(C2)# 将混淆矩阵以热力图的防线显示
sns.set()
f, ax plt.subplots()
# 画热力图
sns.heatmap(C2, cmapYlGnBu_r, annotTrue, axax)
# 标题
ax.set_title(confusion matrix)
# x轴为预测类别
ax.set_xlabel(predict)
# y轴实际类别
ax.set_ylabel(true)
plt.show()4 讨论
LDA模型还是比较简明扼要的主要是针对于线性可分数据判别目的就是使同类别的距离相近使不同类别的距离隔远。对于非线性可分数据需要特别留意实际情况。
LDA是一种监督学习的降维技术且每个样本都是区分类别输出的区别于PCAPCA是不考虑样本类别的无监督降维技术但是目的是一样的都可以理解为将同类别的数据。相比于后者LDA我认为最大的优势就是基于监督可以参考类别的先验经验即可以不断“叠加”然鹅很硬性的一个缺点就是不适合对非高斯分布样本进行降维这个问题PCA也存在。