使用Python創建LDA模型進行分類

來源:數據分析網

線性判別式分析(Linear Discriminant Analysis)簡稱LDA,是模式識別的經典算法。通過對歷史數據進行投影,以保證投影后同一類別的數據盡量靠近,不同類別的數據盡量分開。并生成線性判別模型對新生成的數據進行分離和預測。本篇文章使用機器學習庫scikit-learn建立LDA模型,并通過繪圖展示LDA的分類結果。

準備工作

首先是開始前的準備工作,導入需要使用的庫文件,本篇文章中除了常規的數值計算庫numpy,科學計算庫pandas,和繪圖庫matplotlib以外,還有繪圖庫中的顏色庫,以及機器學習中的數據預處理和LDA庫。

#導入數值計算庫
import numpy as np
#導入科學計算庫
import pandas as pd
#導入繪圖庫
import matplotlib.pyplot as plt
#導入繪圖色彩庫產生內置顏色
from matplotlib.colors import ListedColormap
#導入數據預處理庫
from sklearn import preprocessing
#導入linear discriminant analysis庫
from sklearn.lda import LDA

讀取數據

讀取并創建名稱為data的數據表,后面我們將使用這個數據表創建LDA模型并繪圖。

#讀取數據并創建名為data的數據表
data=pd.DataFrame(pd.read_csv('LDA_data.csv'))

使用head函數查看數據表的前5行,這里可以看到數據表共有三個字段,分別為貸款金額loan_amnt,用戶收入annual_inc和貸款狀態loan_status。

#查看數據表的前5行
data.head()

設置模型特征X和目標Y

將數據表中的貸款金額和用戶收入設置為模型特征X,將貸款狀態設置為模型目標Y,也就是我們要分類的結果。

#設置貸款金額和用戶收入為特征X
X = np.array(data[['loan_amnt','annual_inc']])
#設置貸款狀態為目標Y
Y = np.array(data['loan_status’])

對特征進行標準化處理

貸款金額和用戶收入間差異較大,屬于兩個不同量級的數據。因此需要對數據進行標準化處理,轉化為無量綱的純數值。

#特征數據進行標準化
scaler = preprocessing.StandardScaler().fit(X)
X_Standard=scaler.transform(X)

下面是經過標準化處理后的特征數據。

#查看標準化后的特征數據
X_Standard
#設置分類平滑度
h = .01

創建LDA模型并擬合數據

將標準化后的特征X和目標Y代入到LDA模型中。下面是具體的代碼和計算結果。

#創建LDA模型
clf = LDA()
clf.fit(X_Standard,Y)

繪圖數據預處理

對繪圖數據進行預處理,計算X和Y的邊界值,并使用meshgrid函數計算坐標向量矩陣。

#設置X和Y的邊界值
x_min, x_max = X_Standard[, 0].min() - 1, X_Standard[, 0].max() + 1
y_min, y_max = X_Standard[, 1].min() - 1, X_Standard[, 1].max() + 1
#使用meshgrid函數返回X和Y兩個坐標向量矩陣
xx, yy = np.meshgrid(np.arange(x_min, x_max,h), np.arange(y_min, y_max,h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

設置圖表所使用的顏色,這里使用的是HEX值。

#設置colormap顏色
cm_bright = ListedColormap(['#D9E021', '#0D8ECF’])

繪制LDA分類圖表

首先繪制LDA分類圖表的邊界,這里使用之前計算的坐標矩陣,并設置的colormap顏色和透明度。

#繪制分類邊界
Z = Z.reshape(xx.shape)
plt.pcolormesh(xx, yy, Z, cmap=cm_bright,alpha=0.6)

最后繪制LDA圖表中的數據點,并設置colormap顏色以及圖表標題。以下是具體代碼和圖表。

#繪制數據點
plt.scatter(X_Standard[, 0], X_Standard[, 1], c=Y, cmap=cm_bright)
plt.title('Linear Discriminant Analysis Classifiers')
plt.axis('tight')
plt.show()

今年第六屆大會PyConChina2016,由PyChina.org發起,CPyUG/TopGeek 等社區協辦,將在2016年9月10日(上海)9月25日(深圳)10月15日(北京、杭州)地舉辦的針對Python開發者所舉辦的最盛大和權威的Python相關技術會議,由PyChina社區主辦,致力于推動各類Python相關的技術在互聯網、企業應用等領域的研發和應用。

您可以點擊此處
了解更多詳情,或者掃描下圖二維碼:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容