欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python实现——梯度下降算法实现线性回归

程序员文章站 2022-04-27 10:42:44
这里写自定义目录标题使用python实现机器算法梯度下降利用梯度算法求线性回归功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入使用python实现机器算法梯度下降首先我们要知道梯度算法是用来干什么的?梯度算法简而言之,用来求最...

使用python实现机器算法梯度下降

首先我们要知道梯度算法是用来干什么的?
梯度算法简而言之,用来求最小误差值

利用梯度算法求线性回归

什么是线性回归
线性回归就是能够用一条直线(在一元的情况下)较为精确地描述出数据之间的关系。
**作用:**在新的数据出现时能够预测出相应的值。
python实现——梯度下降算法实现线性回归
这里我们可以举例,我们对房价和房间的大小数据进行线性回归计算,那么我们就可以根据房间大小(X值),代入这个线性方程得出房价(Y值)
知道了线性回归的作用,接下来就是了解如何得到这个它呢,
如何实现线性回归计算
得到这个线性方程我们要定义一个假设函数
python实现——梯度下降算法实现线性回归
通过这个假设函数中,我们已有的数据有 X轴坐标数据,hx就是我们预测出来的Y值。
我们初中的时候就学过Y=kX+b;知道X值我们就可以带入函数得到Y值,这里的k和b就是我们需要通过梯度下降算法求出来的值,
预测值和真实值之间的差距就是误差值,我们就要算出能够得到最小误差值的hx函数。
这里我们引入代价函数
python实现——梯度下降算法实现线性回归
这个代价代价函数中有hx为预测值,y为真实值,m为数据个数

python实现——梯度下降算法实现线性回归
求解theta值有两种方式:一.梯度下降法,二.特征方程法

这里展示如何使用梯度下降法的到theta值
梯度下降算法是求解局部最优解的方法,
python实现——梯度下降算法实现线性回归
公式中:
1.theta需要我们自己随机设定
2.a为学习率
3.代价函数的偏导数如图:
python实现——梯度下降算法实现线性回归

综上:编程步骤应该为
处理数据集——常见梯度下降算法函数——迭代梯度下降算法函数——打印
theta值
代码如下

#读取文件
from numpy import *
file = open("F:\ex1data1.txt")
lines = file.readlines()#逐行读取数据,加入到列表中
m = len(lines)#获得数据数量

#处理数据集
X_data = []
Y_data = []
for i in range(m):
    str=lines[i]
    str1=str.split(',', 1)
    ap_x=float(str1[0])
    ap_y = float(str1[1])
    X_data.append(ap_x)
    Y_data.append(ap_y)

# x的坐标以及对应的矩阵
X_data = array(X_data).reshape(m, 1)
X_1 = ones((m, 1)) 
#reshape作用,改成一个矩阵
X = hstack((X_1, X_data)) #得到一个X轴矩阵
# Y坐标
Y = array(Y_data).reshape(m, 1)
# 学习率
alpha = 0.01


# 代价函数对应的梯度函数,
def gradient_function(theta, X, Y):
    diff = dot(X, theta) - Y
    return (1/m) * dot(X.transpose(), diff)


# 梯度下降迭代
def gradient_descent(X, Y, alpha):
    theta = array([1, 1]).reshape(2, 1)#自定义theta值,
    gradient = gradient_function(theta, X, Y)#梯度下降值
    i=1

    while (i<=1500):#迭代次数
        i=i+1
        theta = theta - alpha * gradient
        gradient = gradient_function(theta, X, Y)

    return theta

#打印theta值
Theta = gradient_descent(X, Y, alpha)
print('Theta0:', Theta[0],'Theta0:',Theta[1])



# 根据数据画出对应的图像
def plot(X, Y, theta):
    import matplotlib.pyplot as plt
    ax = plt.subplot(1,1,1)
    ax.scatter(X, Y, s=30, c="pink", marker="s")
    plt.xlabel("X")
    plt.ylabel("Y")
    x = arange(5.0, 23)  # x的范围
    y = theta[0] + theta[1]*x  #假设函数
    ax.plot(x, y)
    plt.show()




plot(X_data, Y, Theta)

运行结果:
python实现——梯度下降算法实现线性回归

本文地址:https://blog.csdn.net/qq_41887644/article/details/109589418

相关标签: python 机器学习