【机器学习】- 作业2: 基于线性分析的大学综合得分预测

驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算机语言(刘知远教授) 以及数据结构与算法(邓俊辉教授)。本人是综合成绩第一名,除了数据结构与算法其他单科均为第一名。`代码和报告均为本人自己实现,由于篇幅限制,只展示任务布置以及关键代码,如果需要报告或者代码可以私聊博主



机器学习部分授课老师为张敏教授,主要主要通过介绍决策树,线性回归,贝叶斯模型,SVM算法,K近邻算法,Kmeans算法以及集成学习算法等入门机器学习。

有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~



任务介绍

大学排名是一个非常重要同时也极富挑战性与争议性的问题,一所大学的综合实力涉及科研、师资、学生等方方面面。目前全球有上百家评估机构会评估大学的综合得分进行排序,而这些机构的打分也往往并不一致。在这些评分机构中,世界大学排名中心(Center for World University Rankings,缩写CWUR)以评估教育质量、校友就业、研究成果和引用,而非依赖于调查和大学所提交的数据著称,是非常有影响力的一个。

本任务中我们将根据 CWUR 所提供的世界各地知名大学各方面的排名(师资、科研等),一方面通过数据可视化的方式观察不同大学的特点,另一方面希望构建机器学习模型(线性回归)预测一所大学的综合得分。



作业说明

使用来自 Kaggle 的数据,构建「线性回归」模型,根据大学各项指标的排名预测综合得分。

基本要求:

  • 按照 8:2 随机划分训练集测试集,用 RMSE 作为评价指标,得到测试集上线性回归模型的 RMSE 值;
  • 对线性回归模型的系数进行分析。

扩展要求:

  • 对数据进行观察与可视化,展示数据特点;
  • 尝试其他的回归模型,对比效果;
  • 尝试将离散的地区特征融入线性回归模型,并对结果进行对比。

注意事项:

  • 基本输入特征有 8 个:quality_of_education, alumni_employment, quality_of_faculty, publications, influence, citations, broad_impact, patents
  • 预测目标为 score
  • 可以使用 sklearn 等第三方库,不要求自己实现线性回归;
  • 需要保留所有数据集生成、模型训练测试的代码;


报告

核心代码

自实现的最小二乘法

# B: 利用最小二乘法的实现
def addones(i):
    """给X特征添加一列1"""
    ones = np.ones(i.shape[0]).reshape((i.shape[0],1))
    return np.hstack((ones,i))
x_train_lse , x_test_lse = addones(x_train) ,addones(x_test) 
## 对于非方针算逆矩阵,利用np.linalg.pinv()
regression = np.dot(np.dot(np.linalg.pinv(np.dot(x_train_lse.T,x_train_lse)),x_train_lse.T),y_train) #标准方程计算
pred_lse   = np.dot(x_test_lse,regression)

自实现的梯度下降法# C:梯度下降法

class Graddesent()
    def updataTheta(self,data,lr):
        '''#定义一个batch的梯度下降函数
        data:[:,:-1] 是x特征 , [:,-1]是y
        lr:学习率
        w = w - lr * (gradient_w::2*(y - (wx + b))x)
        b = b - lr * (gradient_b::2*(y - (wx + b))
        '''   
        batchsize = len(data) #样本个树
        #初始化batah的梯度
        batch_gradient_b  = 0
        batch_gradient_w  = 0

        for sample in data:
            sample_x = np.array(sample[:-1]) # x
            sample_y = sample[-1]
            #print(sample_x.shape, type(sample_y) , self.weight.shape)
            #计算每个batch里w的梯度均值
            y = (np.dot(sample_x,self.weight) + self.bias)

            # #计算每个batch里bw的梯度
            sample_gradient_b = 2 * (y - sample_y)
            sample_gradient_w = 2 * np.dot((y - sample_y),sample_x.reshape(1,sample_x.shape[0])) 

            batch_gradient_w += sample_gradient_w
            batch_gradient_b += sample_gradient_b
        # print(batch_gradient_w.shape , batch_gradient_b.shape)
        # #更新参数值
        self.weight = self.weight - lr * batch_gradient_w / batchsize
        self.bias   = self.bias   - lr * batch_gradient_b / batchsize 
        # #print(self.weight , self.bias )



c = Graddesent()
c.fit(x_train, y_train, batchsize = 100, lr = 0.1 , epoch = 1000)
y_predict = c.predict(x_test)
rmse_mbgd = np.sqrt(MSE(y_test,y_predict))
r2_mbgd = r2(y_test, y_predict)
print(f"梯度下降的rmse:{rmse_mbgd:.3f}")
print(f"梯度下降的r2:{r2_mbgd:.3f}")

结果

epoch Vs RMSE
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼城周杰伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值