国科大大数据分析课程第一次作业(SVD降维)

一、RandomForest 与 GBDT 的共同点与区别:

注:本人不是很了解随机森林和梯度提升决策树,遂在B站上看了几个关于RF和GBDT的视频解说,之后看到了一篇博客,觉得总结的很全面,以下内容均参考至https://blog.csdn.net/aaa_aaa1sdf/article/details/81391735

训练集选取:随机森林采用的Bagging思想,而GBDT采用的Boosting思想。这两种方法都是Bootstrap思想的应用,Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样,但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重),因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的;

决策树类型:组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成;

结果预测:对于最终的输出结果而言,随机森林采用多数投票、简单平均等;而GBDT则是将所有结果累加起来,或者加权累加起来;

并行/串行:组成随机森林的树可以并行生成;而GBDT只能是串行生成;

异常值:随机森林对异常值不敏感;GBDT对异常值非常敏感;

方差/偏差:随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能

二、利用SVD分解对数据降维

数据集yelp.edgelist:

# coding=utf-8
import numpy as np
import pandas as pd
import scipy as sp
from scipy.sparse.linalg import svds
import matplotlib.pyplot as plt

def GetData(txt_name):
    user_id = []
    rest_id = []
    data = []
    with open(txt_name) as file:
        for line in file.readlines():
            temp = line.strip().split(' ')
            user_id.append(float(temp[0]))
            rest_id.append(float(temp[1]))
            data.append(float(temp[2]))
    return user_id,rest_id,data
def DrawFigure(UV):
    for i in range(0, 9):  # 一共9张图
        print(i)
        # 取出数据
        x = UV[:, i + 1]
        y = UV[:, i]
        # label = 'u' + str(i + 1) + '-->' + 'u' + str(i + 2)
        label = 'v' + str(i + 1) + '-->' + 'v' + str(i + 2)
        plt.scatter(x, y, s=0.5, marker='.', color='b', label=label)
        ax = plt.gca()
        ax.spines['right'].set_color('none')
        ax.spines['top'].set_color('none')
        ax.spines['left'].set_position(('data', 0))
        ax.spines['bottom'].set_position(('data', 0))

        plt.xlim(min(x), max(x))
        plt.ylim(min(y), max(y))

        # plt.title("Spectral Plot of u%d and u%d" % (i + 1, i + 2))
        plt.title("Spectral Plot of v%d and v%d" % (i + 1, i + 2))

        font = {'family': 'FangSong',
                'weight': 'normal',
                'size': 20,
                }
        # plt.xlabel("u%d" % (i + 2), font)
        # plt.ylabel("u%d" % (i + 1), font)
        plt.xlabel("v%d" % (i + 2),font)
        plt.ylabel("v%d" % (i + 1),font)
        plt.legend(fontsize=15)
        plt.show()

if __name__ == '__main__':
    #初始化数据
    user_id = []
    rest_id = []
    data = []
    user_id,rest_id,data=GetData('yelp.edgelist')
    # 根据行和列构造稀疏矩阵
    sm=sp.sparse.coo_matrix((data,(user_id,rest_id)),shape = (len(user_id),len(rest_id)))
    # 奇异值分解,维度选择为10
    U,S,V = svds(sm, 10)
    #画图
    # DrawFigure(U)
    DrawFigure(np.transpose(V))

三、课程中的sliders

在这里插入图片描述

答案:

在这里插入图片描述

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐