《机器学习与数据挖掘》实验一:梯度下降法训练线性回归模型

#### 实验题目:使用梯度下降法训练线性回归模型
#### 实验目的:掌握线性回归的基本原理,以及梯度下降法和最小二乘法;
#### 实验环境(硬件和软件)Anaconda/Jupyternotebook/Pycharm
#### 实验内容:
(1)编码实现基于梯度下降的单变量线性回归算法,包括梯度的计算与验证;
(2)画数据散点图,以及得到的直线;
(3)画梯度下降过程中损失的变量图;
(4)基于训练得到的参数,输入新的样本数据,输出预测值;

1.导入工具

import numpy as np##导入包
import matplotlib.pyplot as plt##画图用

plt.rcParams['font.sans-serif']=['SimHei']##中文标题
plt.rcParams['axes.unicode_minus'] = False

2.步骤,求损失变化量

w=0
b=0
data=np.loadtxt('data1.txt',delimiter=',')
x=data[:,0]
y=data[:,1]
times=1000##次数
a=0.0001227##学习率,最后调试了一下参数,发现这个大小比较好
m=len(x)
E=np.zeros([1000,1])##画图用

#e=0
for j in range(times):
    e=0
    pe_w=0#损失函数对w求骗到
    pe_b=0#对b
    sumx2=0#x平方和
    sumy_b=0
    sumy_wx=0
    for i in range(m):##这次迭代求偏导公式中要用到的连家和
        e+=(y[i]-w*x[i]-b)**2##均方误差
        sumx2+=x[i]**2
        sumy_b+=(y[i]-b)*x[i]
        sumy_wx+=y[i]-w*x[i]
    pe_w=2*(w*sumx2-sumy_b)
    pe_b=2*(m*b-sumy_wx)
    #print(sumy_b)
    E[j,0]=int(e)##e放均方误差矩阵里
    
    w=w-a*pe_w#梯度下降法,每次降学习率*当前偏导这么多,
    #偏导大就降得多,降到最后步子会越来越细。用减法,无论偏导正负都是朝最中心的方向
    b=b-a*pe_b
    #print(w)
#print(e)
#print(type(e))
#earray=E[:,0]
plt.plot(E,"ro-",ms=3)
plt.title("损失的变化图")

 

3.做出拟合直线图

plt.scatter(x,y,c='b',s=5)
plt.plot(x,x*w+b,"r-")
plt.title("拟合直线图")
plt.show()

4.基于训练得到的参数,输入新的样本数据,输出预测值;

x1=np.array([3.12121,4.34343,5.34344])
#输入新样本
y1=w*x1+b
print(y1)#输出预测值

[-0.13504791 1.31647902 2.50410601]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值