(学习笔记)机器学习-------线性回归

记录一下自己深度学习的开始2020.12.08,以后坚持每天都写一点自己学习心得

回归:根据输入的数据,预测出某个具体的值
在这里插入图片描述
h(x)就是预测的值,也可以写作y^
因此,为了找到合适的权重(theta),数学上有很多找到其值的方法,在机器学习和数据分析中,我们常用的方法有四种

  1. 线性回归
  2. 多项式回归
  3. 岭回归
  4. LASSO

代价函数(损失函数)
在学习各类回归方法之前,必须有必要先了解代价函数
损失函数是由似然函数推导可得,而似然函数是指什么样的参数和我们的数据集组合敲好是真实值

在这里插入图片描述
似然函数化解后打开,会得到两个项,左边项都是常量,因此我们只要考虑右边项,而右边项是负数,所以当右边项越小时,权重越接近真实值,因此我们将右边的项叫最小二乘法
图为线性回归的损失值
在这里插入图片描述

在这里插入图片描述

通过上面的介绍,大概了解到损失值是获得的权重与期望的权重差值,我们当然希望这个差值越小越好,所以用上求导的方法找到当损失值最小的时候,权重为多少,这样就可以获得相对正确的数据
图为一元线性回归损失值求导
在这里插入图片描述


线性回归
根据x,y(输出集和结果集)对输入的值进行预测,找到一条近似的值
这里是高中知识了,不做过多概述
在这里插入图片描述
代码实现:

import numpy as np
import matplotlib.pyplot as plt
import time
#读取csv
csv_data=np.loadtxt(r"./data.csv",delimiter=",",dtype=float)
# print(csv_data)
#创建x和y
x=csv_data[:,0]
y=csv_data[:,1]
print(x)
print(y)
#画出散点图
# plt.scatter(x,y)
# plt.show()
#设置学习率
a=0.0001
#设置迭代次数
index=50
#初始化截距theta0
theta0=0
#初始化斜率theta1
theta1=0
#损失函数
def cost(x,y,theta0,theta1):
    result=0
    for i in range(len(x)):
        result+=(y[i]-(theta1*x[i]+theta0))**2
    return result/len(x)/2.0
# print(cost(x,y,theta0,theta1))
#梯度下降法
def gradient_descent_runner(x,y,a,index,theta0,theta1):
    m=len(x)
    for i in range(index):
        theta0_demo=0
        theta1_demo=0

        # #视频给的代码:
        # for j in range(0,len(x)):
        #     theta0_demo+=(1/m)*((theta1*x[j]+theta0)-y[j])
        #     theta1_demo+=(1/m)*((theta1*x[j]+theta0)-y[j])*x[j]
        # theta0=theta0-(theta0_demo*a)
        # theta1 =theta1 - (theta1_demo * a)

        for j in range(len(x)):
            theta0_demo+=(1/m)*((theta1*x[j]+theta0)-y[j])
            theta1_demo+=(1/m)*((theta1*x[j]+theta0)-y[j])*x[j]
        # #更新数据
        theta0=theta0-(theta0_demo * a)
        theta1=theta1-(theta1_demo*a)

        #每下降5次画一次图
        # if i%5==0:
        #     time.sleep(1)
        #     plt.title(i)
        #     plt.scatter(x,y)
        #     plt.plot(x,x*theta1+theta0,color="Orange")
        #     plt.show()
    return theta0,theta1
# print(gradient_descent_runner(x,y,a,index,theta0,theta1))
#打印结果
print(f"原斜率k={theta1},b={theta0},损失值={cost(x,y,theta0,theta1)}")
print("Running...")

theta0,theta1=gradient_descent_runner(x,y,a,index,theta0,theta1)
print(f"得到的回归直线方程中,k={theta1},b={theta0},error={cost(x,y,theta0,theta1)}")
plt.scatter(x,y)
plt.plot(x,x*theta1+theta0,color="red")
plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值