亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python機(jī)器學(xué)習(xí)應(yīng)用之基于線性判別模型的分類篇詳解

 更新時(shí)間:2022年01月18日 17:08:34   作者:柚子味的羊  
線性判別分析(Linear?Discriminant?Analysis,?LDA)是一種監(jiān)督學(xué)習(xí)的降維方法,也就是說數(shù)據(jù)集的每個(gè)樣本是有類別輸出。和之前介紹的機(jī)器學(xué)習(xí)降維之主成分分析(PCA)方法不同,PCA是不考慮樣本類別輸出的無監(jiān)督學(xué)習(xí)方法

一、Introduction

線性判別模型(LDA)在模式識別領(lǐng)域(比如人臉識別等圖形圖像識別領(lǐng)域)中有非常廣泛的應(yīng)用。LDA是一種監(jiān)督學(xué)習(xí)的降維技術(shù),也就是說它的數(shù)據(jù)集的每個(gè)樣本是有類別輸出的。這點(diǎn)和PCA不同。PCA是不考慮樣本類別輸出的無監(jiān)督降維技術(shù)。 LDA的思想可以用一句話概括,就是“投影后類內(nèi)方差最小,類間方差最大”。我們要將數(shù)據(jù)在低維度上進(jìn)行投影,投影后希望每一種類別數(shù)據(jù)的投影點(diǎn)盡可能的接近,而不同類別的數(shù)據(jù)的類別中心之間的距離盡可能的大。即:將數(shù)據(jù)投影到維度更低的空間中,使得投影后的點(diǎn),會形成按類別區(qū)分,一簇一簇的情況,相同類別的點(diǎn),將會在投影后的空間中更接近方法。

1 LDA的優(yōu)點(diǎn)

  • 在降維過程中可以使用類別的先驗(yàn)知識經(jīng)驗(yàn),而像PCA這樣的無監(jiān)督學(xué)習(xí)則無法使用類別先驗(yàn)知識;
  • LDA在樣本分類信息依賴均值而不是方差的時(shí)候,比PCA之類的算法較優(yōu)

2 LDA的缺點(diǎn)

  • LDA不適合對非高斯分布樣本進(jìn)行降維,PCA也有這個(gè)問題
  • LDA降維最多降到類別數(shù) k-1 的維數(shù),如果我們降維的維度大于 k-1,則不能使用 LDA。當(dāng)然目前有一些LDA的進(jìn)化版算法可以繞過這個(gè)問題
  • LDA在樣本分類信息依賴方差而不是均值的時(shí)候,降維效果不好
  • LDA可能過度擬合數(shù)據(jù)

3 LDA在模式識別領(lǐng)域與自然語言處理領(lǐng)域的區(qū)別

在自然語言處理領(lǐng)域,LDA是隱含狄利克雷分布,它是一種處理文檔的主題模型。本文討論的是線性判別分析 LDA除了可以用于降維以外,還可以用于分類。一個(gè)常見的LDA分類基本思想是假設(shè)各個(gè)類別的樣本數(shù)據(jù)符合高斯分布,這樣利用LDA進(jìn)行投影后,可以利用極大似然估計(jì)計(jì)算各個(gè)類別投影數(shù)據(jù)的均值和方差,進(jìn)而得到該類別高斯分布的概率密度函數(shù)。當(dāng)一個(gè)新的樣本到來后,我們可以將它投影,然后將投影后的樣本特征分別帶入各個(gè)類別的高斯分布概率密度函數(shù),計(jì)算它屬于這個(gè)類別的概率,最大的概率對應(yīng)的類別即為預(yù)測類別

二、Demo

#%%導(dǎo)入基本庫
# 基礎(chǔ)數(shù)組運(yùn)算庫導(dǎo)入
import numpy as np 
# 畫圖庫導(dǎo)入
import matplotlib.pyplot as plt 
# 導(dǎo)入三維顯示工具
from mpl_toolkits.mplot3d import Axes3D
# 導(dǎo)入LDA模型
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 導(dǎo)入demo數(shù)據(jù)制作方法
from sklearn.datasets import make_classification
#%%模型訓(xùn)練
# 制作四個(gè)類別的數(shù)據(jù),每個(gè)類別100個(gè)樣本
X, y = make_classification(n_samples=1000, n_features=3, n_redundant=0,
                           n_classes=4, n_informative=2, n_clusters_per_class=1,
                           class_sep=3, random_state=10)
# 將四個(gè)類別的數(shù)據(jù)進(jìn)行三維顯示
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=20, azim=20)
ax.scatter(X[:, 0], X[:, 1], X[:, 2], marker='o', c=y)
plt.show()

#%%建立 LDA 模型
lda = LinearDiscriminantAnalysis()
# 進(jìn)行模型訓(xùn)練
lda.fit(X, y)
#%%查看lda的參數(shù)
print(lda.get_params())

#%%數(shù)據(jù)可視化
#模型預(yù)測
X_new = lda.transform(X)
# 可視化預(yù)測數(shù)據(jù)
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o', c=y)
plt.show()

#%%使用新的數(shù)據(jù)進(jìn)行測試
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))

三、基于LDA 手寫數(shù)字的分類

#%%導(dǎo)入庫函數(shù)
# 導(dǎo)入手寫數(shù)據(jù)集 MNIST
from sklearn.datasets import load_digits
# 導(dǎo)入訓(xùn)練集分割方法
from sklearn.model_selection import train_test_split
# 導(dǎo)入LDA模型
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# 導(dǎo)入預(yù)測指標(biāo)計(jì)算函數(shù)和混淆矩陣計(jì)算函數(shù)
from sklearn.metrics import classification_report, confusion_matrix
# 導(dǎo)入繪圖包
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
#%% 導(dǎo)入MNIST數(shù)據(jù)集
mnist = load_digits()
# 查看數(shù)據(jù)集信息
print('The Mnist dataeset:\n',mnist)

# 分割數(shù)據(jù)為訓(xùn)練集和測試集
x, test_x, y, test_y = train_test_split(mnist.data, mnist.target, test_size=0.1, random_state=2)

#%%## 輸出示例圖像
images = range(0,9)

plt.figure(dpi=100)
for i in images:
    plt.subplot(330 + 1 + i)
    plt.imshow(x[i].reshape(8, 8), cmap = matplotlib.cm.binary,interpolation="nearest")
# show the plot
plt.show()

#%%利用LDA對手寫數(shù)字進(jìn)行訓(xùn)練與預(yù)測
m_lda = LinearDiscriminantAnalysis()# 建立 LDA 模型
# 進(jìn)行模型訓(xùn)練
m_lda.fit(x, y)
# 進(jìn)行模型預(yù)測
x_new = m_lda.transform(x)
# 可視化預(yù)測數(shù)據(jù)
plt.scatter(x_new[:, 0], x_new[:, 1], marker='o', c=y)
plt.title('MNIST with LDA Model')
plt.show()

#%% 進(jìn)行測試集數(shù)據(jù)的類別預(yù)測
y_test_pred = m_lda.predict(test_x)
print("測試集的真實(shí)標(biāo)簽:\n", test_y)
print("測試集的預(yù)測標(biāo)簽:\n", y_test_pred)
#%% 進(jìn)行預(yù)測結(jié)果指標(biāo)統(tǒng)計(jì) 統(tǒng)計(jì)每一類別的預(yù)測準(zhǔn)確率、召回率、F1分?jǐn)?shù)
print(classification_report(test_y, y_test_pred))
# 計(jì)算混淆矩陣
C2 = confusion_matrix(test_y, y_test_pred)
# 打混淆矩陣
print(C2)

# 將混淆矩陣以熱力圖的防線顯示
sns.set()
f, ax = plt.subplots()
# 畫熱力圖
sns.heatmap(C2, cmap="YlGnBu_r", annot=True, ax=ax)  
# 標(biāo)題 
ax.set_title('confusion matrix')
# x軸為預(yù)測類別
ax.set_xlabel('predict')  
# y軸實(shí)際類別
ax.set_ylabel('true')  
plt.show()

四、小結(jié)

LDA適用于線性可分?jǐn)?shù)據(jù),在非線性數(shù)據(jù)上要謹(jǐn)慎使用。 886~~~

到此這篇關(guān)于Python機(jī)器學(xué)習(xí)應(yīng)用之基于線性判別模型的分類篇詳解的文章就介紹到這了,更多相關(guān)Python 線性判別模型的分類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python調(diào)用REST API接口的幾種方式匯總

    Python調(diào)用REST API接口的幾種方式匯總

    這篇文章主要介紹了Python調(diào)用REST API接口的幾種方式匯總,幫助大家更好的利用python進(jìn)行自動化運(yùn)維,感興趣的朋友可以了解下
    2020-10-10
  • Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法

    Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法

    本文主要介紹了Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • PyQt5 QSerialPort子線程操作的實(shí)現(xiàn)

    PyQt5 QSerialPort子線程操作的實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5 QSerialPort子線程操作的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Python入門教程(三)Python語法解析

    Python入門教程(三)Python語法解析

    這篇文章主要介紹了Python入門教程(三)Python語法解析,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • selenium+python實(shí)現(xiàn)基本自動化測試的示例代碼

    selenium+python實(shí)現(xiàn)基本自動化測試的示例代碼

    這篇文章主要介紹了selenium+python實(shí)現(xiàn)基本自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題

    pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題

    這篇文章主要介紹了pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Python?Scala中使用def語句定義方法的詳細(xì)過程

    Python?Scala中使用def語句定義方法的詳細(xì)過程

    這篇文章主要介紹了Python?Scala中使用def語句定義方法,Scala的方法是類的一部分,而函數(shù)是一個(gè)對象可以賦值給一個(gè)變量,下面來講解Scala的方法,需要的朋友可以參考下
    2022-09-09
  • python 實(shí)現(xiàn)單通道轉(zhuǎn)3通道

    python 實(shí)現(xiàn)單通道轉(zhuǎn)3通道

    今天小編就為大家分享一篇python 實(shí)現(xiàn)單通道轉(zhuǎn)3通道,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python 指定源路徑來解決import問題的操作

    python 指定源路徑來解決import問題的操作

    這篇文章主要介紹了python 指定源路徑來解決import問題的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • ?分享一個(gè)Python?遇到數(shù)據(jù)庫超好用的模塊

    ?分享一個(gè)Python?遇到數(shù)據(jù)庫超好用的模塊

    這篇文章主要介紹了?分享一個(gè)Python?遇到數(shù)據(jù)庫超好用的模塊,SQLALchemy這個(gè)模塊,該模塊是Python當(dāng)中最有名的ORM框架,該框架是建立在數(shù)據(jù)庫API之上,使用關(guān)系對象映射進(jìn)行數(shù)據(jù)庫的操作,,需要的朋友可以參考下
    2022-04-04

最新評論