python实现——梯度下降算法实现线性回归
使用python实现机器算法梯度下降
首先我们要知道梯度算法是用来干什么的?
梯度算法简而言之,用来求最小误差值
利用梯度算法求线性回归
什么是线性回归:
线性回归就是能够用一条直线(在一元的情况下)较为精确地描述出数据之间的关系。
**作用:**在新的数据出现时能够预测出相应的值。
这里我们可以举例,我们对房价和房间的大小数据进行线性回归计算,那么我们就可以根据房间大小(X值),代入这个线性方程得出房价(Y值)
知道了线性回归的作用,接下来就是了解如何得到这个它呢,
如何实现线性回归计算:
得到这个线性方程我们要定义一个假设函数
通过这个假设函数中,我们已有的数据有 X轴坐标数据,hx就是我们预测出来的Y值。
我们初中的时候就学过Y=kX+b;知道X值我们就可以带入函数得到Y值,这里的k和b就是我们需要通过梯度下降算法求出来的值,
预测值和真实值之间的差距就是误差值,我们就要算出能够得到最小误差值的hx函数。
这里我们引入代价函数
这个代价代价函数中有hx为预测值,y为真实值,m为数据个数
求解theta值有两种方式:一.梯度下降法,二.特征方程法
这里展示如何使用梯度下降法的到theta值
梯度下降算法是求解局部最优解的方法,
公式中:
1.theta需要我们自己随机设定
2.a为学习率
3.代价函数的偏导数如图:
综上:编程步骤应该为
处理数据集——常见梯度下降算法函数——迭代梯度下降算法函数——打印
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)
运行结果:
本文地址:https://blog.csdn.net/qq_41887644/article/details/109589418
上一篇: BBSXP论坛程序New.asp页面过滤不严导致SQL注入漏洞
下一篇: java数制转换的方法