
国科大大数据分析课程第一次作业(SVD降维)
一、RandomForest 与 GBDT 的共同点与区别:注:本人不是很了解随机森林和梯度提升决策树,遂在B站上看了几个关于RF和GBDT的视频解说,之后看到了一篇博客,觉得总结的很全面,以下内容均参考至https://blog.csdn.net/aaa_aaa1sdf/article/details/81391735训练集选取:随机森林采用的Bagging思想,而GBDT采用的Boosting
国科大大数据分析课程第一次作业(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
答案:
更多推荐
所有评论(0)