用Jupyter notebook完成Iris數據集的 Fisher線性分類,並學習數據可視化技術

一、關於Fisher算法的主要思想與數學計算步驟已在上次博客中有講到。

若不會清楚,請訪問次鏈接

二、用scikit-learn庫中也有LDA的函數,下面給出測試代碼

from sklearn import datasets, cross_validation,discriminant_analysis
 
###############################################################################
#用鶯尾花數據集
def load_data():
    iris=datasets.load_iris()
    return cross_validation.train_test_split(iris.data,iris.target,test_size=0.25,random_state=0,stratify=iris.target)  
    #返回爲: 一個元組,依次爲:訓練樣本集、測試樣本集、訓練樣本的標記、測試樣本的標記 
    
###############################################################################
def test_LinearDiscriminantAnalysis(*data):
    x_train,x_test,y_train,y_test=data
    lda=discriminant_analysis.LinearDiscriminantAnalysis()
    lda.fit(x_train,y_train)
    print('Coefficients:%s, intercept %s'%(lda.coef_,lda.intercept_))#輸出權重向量和b
    print('Score: %.2f' % lda.score(x_test, y_test))#測試集
    print('Score: %.2f' % lda.score(x_train, y_train))#訓練集
 
###############################################################################
x_train,x_test,y_train,y_test=load_data()
test_LinearDiscriminantAnalysis(x_train,x_test,y_train,y_test)
運行結果:

在這裏插入圖片描述

對比結果發現:原本的鳶尾花的測試集的預測準確度爲100%,但經過分類器訓練後,變成了97%也就是我們所說的訓練集。

三、完成Iris數據集的 Fisher線性分類,及實現可視化

Fisher的種映射關係還有一種作用就是作爲降維技術,稱爲監督降維技術(因爲是有訓練數據的,所以稱爲監督)

from sklearn import datasets, cross_validation,discriminant_analysis
 
###############################################################################
#用鶯尾花數據集
def load_data():
    iris=datasets.load_iris()
    return cross_validation.train_test_split(iris.data,iris.target,test_size=0.25,random_state=0,stratify=iris.target)  
    #返回爲: 一個元組,依次爲:訓練樣本集、測試樣本集、訓練樣本的標記、測試樣本的標記 
    
 
###############################################################################
def plot_LDA(converted_X,y):
    '''
    繪製經過 LDA 轉換後的數據
    :param converted_X: 經過 LDA轉換後的樣本集
    :param y: 樣本集的標記
    :return:  None
    '''
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt 
    fig=plt.figure()
    ax=Axes3D(fig)
    colors='rgb'
    markers='o*s'
    for target,color,marker in zip([0,1,2],colors,markers):
        pos=(y==target).ravel()
        X=converted_X[pos,:]
        ax.scatter(X[:,0], X[:,1], X[:,2],color=color,marker=marker,
			label="Label %d"%target)
    ax.legend(loc="best")
    fig.suptitle("Iris After LDA")
    plt.show()
    
 
###############################################################################
import numpy as np
x_train,x_test,y_train,y_test=load_data()
X=np.vstack((x_train,x_test))#沿着豎直方向將矩陣堆疊起來,把訓練與測試的數據放一起來看
Y=np.vstack((y_train.reshape(y_train.size,1),y_test.reshape(y_test.size,1)))#沿着豎直方向將矩陣堆疊起來
lda = discriminant_analysis.LinearDiscriminantAnalysis()
lda.fit(X, Y)
converted_X=np.dot(X,np.transpose(lda.coef_))+lda.intercept_
plot_LDA(converted_X,Y)

運行結果:
在這裏插入圖片描述

可以看出,Fisher確實能夠實現降維。假設存在M個類,則多分類LDA可以將樣本投影到M-1維空間。

此上就是完成了對完成Iris數據集的 Fisher線性分類,並學習數據可視化技術

參考博客:https://blog.csdn.net/gwplovekimi/article/details/80299070?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章