用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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值