預處理(3):python實現用scikit-learn實現的線性判別分析(LDA)
預處理(3):python實現用scikit-learn實現的線性判別分析(LDA)
線性判別分析(LDA)可用於特徵提取以提高計算效率和減少在非正則化過程中因維數過高而造成的過擬合。
LDA背後的基本概念與PCA非常類似。PCA試圖找到資料集中最大方差的正交成分軸,而LDA的目標是尋找和優化具有可分性的特徵子空間。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
from matplotlib.colors import ListedColormap
from sklearn.linear_model import LogisticRegression
df_wine = pd.read_csv('xxx\wine.data',
header=None)
df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash',
'Alcalinity of ash', 'Magnesium', 'Total phenols',
'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins',
'Color intensity', 'Hue',
'OD280/OD315 of diluted wines', 'Proline']
df_wine.head()
X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
stratify=y,
random_state=0)
sc = StandardScaler()
X_train_std = sc.fit_transform(X_train)
X_test_std = sc.transform(X_test)
def plot_decision_regions(X, y, classifier, resolution=0.02):
# setup marker generator and color map
markers = ('s', 'x', 'o', '^', 'v')
colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
# plot the decision surface
x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
np.arange(x2_min, x2_max, resolution))
Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
# plot class samples
for idx, cl in enumerate(np.unique(y)):
plt.scatter(x=X[y == cl, 0],
y=X[y == cl, 1],
alpha=0.6,
c=cmap(idx),
edgecolor='black',
marker=markers[idx],
label=cl)
lda = LDA(n_components=2)
X_train_lda = lda.fit_transform(X_train_std, y_train)
lr = LogisticRegression()
lr = lr.fit(X_train_lda, y_train)
plot_decision_regions(X_train_lda, y_train, classifier=lr)
plt.xlabel('LD 1')
plt.ylabel('LD 2')
plt.legend(loc='lower left')
plt.tight_layout()
# plt.savefig('images/05_09.png', dpi=300)
plt.show()
# 是觀察測試集上的結果
# 邏輯迴歸分類器能夠用一個二維特徵子空間代替原來的13個葡萄酒特徵,從而在測試集中對樣本進行精確分類
X_test_lda = lda.transform(X_test_std)
plot_decision_regions(X_test_lda, y_test, classifier=lr)
plt.xlabel('LD 1')
plt.ylabel('LD 2')
plt.legend(loc='lower left')
plt.tight_layout()
# plt.savefig('images/05_10.png', dpi=300)
plt.show()
執行結果圖:
備註:程式碼為《python機器學習》(原書第2版)機械工業出版社,書籍中示例程式碼,學習過程中整理,現分享出來,供大家學習參考。
相關文章
- 運用sklearn進行線性判別分析(LDA)程式碼實現LDA
- LDA(線性判別分析)LDA
- 史上最好的LDA(線性判別分析)教程LDA
- 線性判別分析LDA原理總結LDA
- 線性判別分析(Linear Discriminant Analysis, LDA)NaNLDA
- ISLR讀書筆記七:線性判別分析(LDA)筆記LDA
- 採用線性迴歸實現訓練和預測(Python)Python
- Alink漫談(十) :線性迴歸實現 之 資料預處理
- Vue3 如何實現全域性異常處理?Vue
- 線性表分析及Java實現Java
- 教程 | 用Scikit-Learn實現多類別文字分類文字分類
- LDA主題模型簡介及Python實現LDA模型Python
- 【機器學習】線性迴歸python實現機器學習Python
- Scikit-learn SVM 實現
- css3實現文字線性漸變,css3實現背景漸變CSSS3
- 用 Python 實現 PowerDesigner 資料模型檔案的處理Python模型
- 使用Java預處理實現JSON插入PostgreSQLJavaJSONSQL
- 影像處理的實現與應用(Ruby 版)
- 影像處理的實現與應用(Swift 版)Swift
- 影像處理的實現與應用(TypeScript 版)TypeScript
- 影像處理的實現與應用(PHP 版)PHP
- 影像處理的實現與應用(Elixir 版)
- 3種方式實現python多執行緒併發處理Python執行緒
- 基本線性資料結構的Python實現資料結構Python
- 用scikit-learn進行LDA降維LDA
- 基於感知機的人名-性別預測系統 —— Python實現Python
- Spark SQL:實現日誌離線批處理SparkSQL
- 線性表及其實現
- 資料預處理(資料清洗)的一般方法及python實現Python
- 機器學習:scikit-learn實現手寫數字識別機器學習
- 用線性迴歸無編碼實現文章瀏覽數預測
- 【scikit-learn基礎】--『預處理』之 缺失值處理
- 機器學習之線性迴歸(純python實現)機器學習Python
- 機器學習降維之線性判別分析機器學習
- 周志華《機器學習》課後習題解答系列(四):Ch3.5 - 程式設計實現線性判別分析機器學習程式設計
- Python資料分析與挖掘實戰(資料預處理)Python
- 用Java實現Stream流處理中的滑窗Java
- 梯度下降法實現最簡單線性迴歸問題python實現梯度Python