EX 5: Linear and Quadratic Discriminant Analysis with confidence ellipsoid
分類法/範例五:Linear and Quadratic Discriminant Analysis with confidence ellipsoid
線性判別以及二次判別的比較
http://scikit-learn.org/stable/auto_examples/classification/plot_lda_qda.html
(一)資料產生function
這個範例引入的套件,主要特點在: 1. scipy.linalg:線性代數相關函式,這裏主要使用到linalg.eigh 特徵值相關問題 2. matplotlib.colors: 用來處理繪圖時的色彩分佈 3. LinearDiscriminantAnalysis:線性判別演算法 4. QuadraticDiscriminantAnalysis:二次判別演算法
%matplotlib inline
from scipy import linalg
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import colors
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis接下來是設定一個線性變化的colormap,LinearSegmentedColormap(name, segmentdata) 預設會傳回一個256個值的數值顏色對應關係。用一個具備有三個項目的dict變數segmentdata來設定。以'red': [(0, 1, 1), (1, 0.7, 0.7)]來解釋,就是我們希望數值由0到1的過程,紅色通道將由1線性變化至0.7。
cmap = colors.LinearSegmentedColormap(
'red_blue_classes',
{'red': [(0, 1, 1), (1, 0.7, 0.7)],
'green': [(0, 0.7, 0.7), (1, 0.7, 0.7)],
'blue': [(0, 0.7, 0.7), (1, 1, 1)]})
plt.cm.register_cmap(cmap=cmap)我們可以用以下程式碼來觀察。當輸入數值為np.arange(0,1.1,0.1)也就是0,0.1...,1.0 時RGB數值的變化情形。
接著我們產生兩組資料, 每組資料有 600筆資料,2個特徵 X: 600x2以及2個類別 y:600 (前300個元素為0,餘下為1): 1. dataset_fixed_cov():2個類別的特徵具備有相同共變數(covariance) 2. dataset_fixed_cov():2個類別的特徵具備有不同之共變數 差異落在X資料的產生np.dot(np.random.randn(n, dim), C) 與 np.dot(np.random.randn(n, dim), C.T)的不同。np.dot(np.random.randn(n, dim), C)會產生300x2之矩陣,其亂數產生的範圍可交由C矩陣來控制。在dataset_fixed_cov()中,前後300筆資料產生之範圍皆由C來調控。我們可以在最下方的結果圖示看到上排影像(相同共變數)的資料分佈無論是紅色(代表類別1)以及藍色(代表類別2)其分佈形狀相似。而下排影像(不同共變數),分佈形狀則不同。圖示中,橫軸及縱軸分別表示第一及第二個特徵,讀者可以試著將 0.83這個數字減少或是將C.T改成C,看看最後結果圖形有了什麼改變?
(二)繪圖函式
找出 True Positive及False Negative 之辨認點
以紅色及藍色分別表示分類為 0及1的資料點,而以深紅跟深藍來表示誤判資料
以
lda.predict_proba()畫出分類的機率分佈(請參考範例三)
(為了方便在ipython notebook環境下顯示,下面函式有經過微調)
(三)測試資料並繪圖

Python source code: plot_lda_qda.py
http://scikit-learn.org/stable/_downloads/plot_lda_qda.py
(一)引入函式庫
引入函式如下:
numpy : 產生陣列數值
matplotlib.pyplot : 用來繪製影像
sklearn import datasets, cluster : datasets : 用來繪入內建之手寫數字資料庫 ; cluster : 其內收集非監督clustering演算法
sklearn.feature_extraction.image import grid_to_graph : 定義資料的結構
Last updated