預處理(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
- 線性判別分析(Linear Discriminant Analysis, LDA)NaNLDA
- ISLR讀書筆記七:線性判別分析(LDA)筆記LDA
- Alink漫談(十) :線性迴歸實現 之 資料預處理
- 採用線性迴歸實現訓練和預測(Python)Python
- Vue3 如何實現全域性異常處理?Vue
- 教程 | 用Scikit-Learn實現多類別文字分類文字分類
- LDA主題模型簡介及Python實現LDA模型Python
- 使用Java預處理實現JSON插入PostgreSQLJavaJSONSQL
- Scikit-learn SVM 實現
- 3種方式實現python多執行緒併發處理Python執行緒
- 資料預處理(資料清洗)的一般方法及python實現Python
- 影像處理的實現與應用(Elixir 版)
- 影像處理的實現與應用(TypeScript 版)TypeScript
- 影像處理的實現與應用(PHP 版)PHP
- 影像處理的實現與應用(Ruby 版)
- 影像處理的實現與應用(Swift 版)Swift
- 基於感知機的人名-性別預測系統 —— Python實現Python
- 線性判別分析(Linear Discriminant Analysis)NaN
- css3實現文字線性漸變,css3實現背景漸變CSSS3
- Spark SQL:實現日誌離線批處理SparkSQL
- 【scikit-learn基礎】--『預處理』之 缺失值處理
- 用Java實現Stream流處理中的滑窗Java
- python中的scikit-learn庫來實現SVM分類器。Python
- 線性表及其實現
- 梯度下降法實現最簡單線性迴歸問題python實現梯度Python
- 用線性迴歸無編碼實現文章瀏覽數預測
- 用Python實現線性迴歸,8種方法哪個最高效?Python
- 【機器學習】線性迴歸python實現機器學習Python
- 簡單實現批處理
- 用WordCloud詞雲+LDA主題模型,帶你讀一讀《芳華》(python實現)CloudLDA模型Python
- Pytorch資料讀取與預處理實現與探索PyTorch
- 判斷點是否在多邊形內的Python實現及小應用(射線法)斷點Python
- pytorch實現線性迴歸PyTorch
- TensorFlow實現線性迴歸
- 用python實現簡單的線上翻譯程式Python
- 如何透過Scikit-Learn實現多類別文字分類?文字分類