中国mooc北京理工大学机器学习第一周

胖咸鱼y 胖咸鱼y     2022-09-01     593

关键词:

---恢复内容开始---

今天学习第一周的第二课时:降维。

一、PCA主成分分析

主成分分析(Principal Component Analysis,PCA),是一种统计方法,直观来讲是把数据按照weights来筛选出主成分消除(或者隐蔽)不太重要的方面,使得高纬度数据投射到低维度。

直观来讲是应用了统计学上方差和协方差的知识,若协方差越接近1则表示A,B越接近;反之,若等于零则无关。

这里可以理解在一个高纬度角度(n维空间)去找一个角度使得从你这个角度看过去很多cov(A,B)很小的数值为零,这样就达到降低维度的目的。

对应cs231n的第一课到第三课房价问题和无监督学习。这里依旧只是学习sklearn的方法运用,如果有时间的话端午回来补这方面的欠缺。

    import matplotlib.pyplot as plt
    from sklearn.decomposition import PCA
    from sklearn.datasets import load_iris

data = load_iris() #load数据集和(x,y)。因为pca需要传入两个参数 y = data.target#这里的target是参数 X = data.data

pca = PCA(n_components=2)#实例化 reduced_X = pca.fit_transform(X)#机器的降维处理 red_x, red_y = [], []#三种花 blue_x, blue_y = [], [] green_x, green_y = [], [] for i in range(len(reduced_X)): if y[i] == 0: red_x.append(reduced_X[i][0]) red_y.append(reduced_X[i][1]) elif y[i] == 1: blue_x.append(reduced_X[i][0]) blue_y.append(reduced_X[i][1]) else: green_x.append(reduced_X[i][0]) green_y.append(reduced_X[i][1]) plt.scatter(red_x, red_y, c=r, marker=x) plt.scatter(blue_x, blue_y, c=b, marker=D) plt.scatter(green_x, green_y, c=g, marker=.) plt.show()

基本上利用到pca就是pac=PCA(n_component=2)和reduced_X=pca.fit_transform(X)两句。

target是一组(150,)的数据,为0,1,2,代表三种不同的花。data是(150,4)是花的四种特征。

 

二、NMF非负矩阵分解

如名字所示,把一个非负矩阵V分解成两个非负矩阵的乘积(W,H)W是特征矩阵,H是系数矩阵。

NMF应用于图像处理和语音识别。

NMF分解的原则是最小化乘积矩阵和原矩阵的差。

    from numpy.random import RandomState
    import matplotlib.pyplot as plt
    from sklearn.datasets import fetch_olivetti_faces
    from sklearn import decomposition
     
     
    n_row, n_col = 2, 3
    n_components = n_row * n_col
    image_shape = (64, 64)
     
     
    ###############################################################################
    # Load faces data
    dataset = fetch_olivetti_faces(shuffle=True, random_state=RandomState(0))
    faces = dataset.data
     
    ###############################################################################
    def plot_gallery(title, images, n_col=n_col, n_row=n_row):
        plt.figure(figsize=(2. * n_col, 2.26 * n_row)) 
        plt.suptitle(title, size=16)
     
        for i, comp in enumerate(images):
            plt.subplot(n_row, n_col, i + 1)
            vmax = max(comp.max(), -comp.min())
     
            plt.imshow(comp.reshape(image_shape), cmap=plt.cm.gray,
                       interpolation=nearest, vmin=-vmax, vmax=vmax)
            plt.xticks(())
            plt.yticks(())
        plt.subplots_adjust(0.01, 0.05, 0.99, 0.94, 0.04, 0.)
     
         
    plot_gallery("First centered Olivetti faces", faces[:n_components])
    ###############################################################################
     
    estimators = [
        (Eigenfaces - PCA using randomized SVD,
             decomposition.PCA(n_components=6,whiten=True)),
     
        (Non-negative components - NMF,
             decomposition.NMF(n_components=6, init=nndsvda, tol=5e-3))
    ]
     
    ###############################################################################
     
    for name, estimator in estimators:
        print("Extracting the top %d %s..." % (n_components, name))
        print(faces.shape)
        estimator.fit(faces)
        components_ = estimator.components_
        plot_gallery(name, components_[:n_components])
     
    plt.show()

 

 

---恢复内容结束---

中国mooc北京理工大学机器学习第一周

---恢复内容开始---今天学习第一周的第二课时:降维。一、PCA主成分分析主成分分析(PrincipalComponentAnalysis,PCA),是一种统计方法,直观来讲是把数据按照weights来筛选出主成分消除(或者隐蔽)不太重要的方面,使得高纬度数... 查看详情

中国mooc北京理工大学机器学习第二周:分类

一、K近邻方法(KNeighborsClassifier)使用方法同kmeans方法,先构造分类器,再进行拟合。区别是Kmeans聚类是无监督学习,KNN是监督学习,因此需要划分出训练集和测试集。 直接贴代码。 X=[0,1,2,3]#样本Y=[0,0,1,1]#标签fromsklearn.... 查看详情

中国mooc北京理工大学机器学习第三周:强化学习基础

强化学习是程序或者智能体通过与环境不断地进行交互学习一个从环境到动作的映射,学习的目标使累计回报最大化。 强化学习是一种试错学习,在各种状态选需要尽量尝试所有可以选择的动作,通过环境的反馈来判断动作... 查看详情

中国mooc北京理工大学机器学习第二周:手写数字识别

利用sklearn中的神经网络进行数字识别。先简单搬运占坑,暂时用不到。importnumpyasnp#导入numpy工具包fromosimportlistdir#使用listdir模块,用于访问本地文件fromsklearn.neural_networkimportMLPClassifierdefimg2vector(fileName):retMat=np.zeros([1024],int)#定 查看详情

中国mooc北京理工大学机器学习第二周:回归

一、线性回归(LinerRegression)利用数理统计中的回归分析,来确定两种或两种以上变量间相互依赖的定量关系的统计方法。 线性回归是用最小平方函数对一个或多个自变量和因变量之间进行建模。 导入和使用比较简单。... 查看详情

201771010142张燕《面向对象程序设计(java)》第一周学习总结

...60;protected]代码托管平台:https://github.com/[email protected]中国大学MOOC:ht 查看详情

王艳201771010127《面向对象程序设计(java)》第一周学习总结

...测:https://pintia.cn/JAVA!代码托管平台:https://github.com/JAVAWY中国大学MOOC: https://www.icourse163.org/ 查看详情

杨玲201771010133《面向对象程序设计(java)》第一周学习总结

...[email protected]代码托管平台:https://github.com/lingxiaoyanga中国大学MOOC: https://www.icourse16 查看详情

赵栋201771010137《面向对象程序设计(java)》第一周学习总结

...tia.cn/[email protected]代码托管平台:https://github.com/STPPKJ中国大学MOOC: https://www.i 查看详情

李瑞红201771010111《面向对象程序设计(java)》第一周学习总结

...cn/[email protected]代码托管平台:https://github.com/3451487490中国大学MOOC:https://w 查看详情

马凯军201771010116《面向对象程序设计(java)》第一周学习总结

...mail protected]代码托管平台:https://github.com/xiaoqianliunian中国大学MOOC: htt 查看详情

达拉草201771010105《面向对象程序设计(java)》第一周学习总结

...ia.cn/[email protected]代码托管平台:https://github.com/dalacao中国大学MOOC:https://www.icourse 查看详情

201771010103陈亚茹《面向对象程序设计(java)》第一周学习总结

...tia.cn/[email protected]代码托管平台:https://github.com/980303中国大学MOOC: 查看详情

焦旭超201771010109《面向对象程序设计(java)》第一周学习总结

...ia.cn/[email protected]代码托管平台:https://github.com/Jcczits中国大学MOOC: https://www.icourse16 查看详情

张季跃201771010139《面向对象程序设计(java)》第一周学习总结(改)

...60;protected]代码托管平台:https://github.com/[email protected]中国大学MOOC:&n 查看详情

中国大学mooc-陈越何钦铭-数据结构-2017春

    跟着《中国大学MOOC-陈越、何钦铭-数据结构-2017春》学习,平时练习一下pat上的作业外;在这里记录一下:平时学习视屏的收获。1.递归内存爆掉    2.解决问题的效率和算法的技巧有关,第一种写... 查看详情

周强201771010141《面向对象程序设计(java)》第一周学习总结(代码片段)

...cn/[email protected]代码托管平台:https://github.com/xiaoaqiang中国大学MOOC: https://ww 查看详情

201772020113李清华《面向对象程序设计(java)》第一周学习总结

...tia.cn/bmwb 代码托管平台:https://github.com/登陆不上 中国大学MOOC:https://www.icours 查看详情