机器学习:单元线性回归(python简单实现)

python

文章简介

使用python简单实现机器学习中单元线性回归算法。

算法目的

该算法核心目的是为了求出假设函数h中多个theta的值,使得代入数据集合中的每个x,求得的h(x)与每个数据集合中的y的差值的和最小。简单来说就是需要生成一个函数,它尽可能贴近实际数据中的每个值,方便我们预测。

核心算法

  1. 假设函数

    即需要求的函数,为了简单在此只设置一个x对应一个y,求theta0和theta1

  2. 代价函数

    目的是J最小,也就是每个y到达函数的距离之和最小。

  3. 批量梯度下降函数

    带假设函数和代价函数带入到下降函数中可得

算法实现

import numpy as np

import matplotlib.pyplot as plt

def hypoFunction(x, theta):

h = np.dot(x, theta)

return h

def costFunction(h, y):

"""

代价函数

h:hypothesis,

theta:特征向量系数

y:特征值对应的实际值

"""

m = len(y)

J = 1 / (2 * m) * np.sum(np.power(h - y, 2))

return J

def gradientDecent(x, y, h, theta, alpha, number):

"""梯度下降函数

number:设置的梯度下降次数"""

# for i in range(number):

m = len(y)

n = len(theta)

J_history = np.zeros((number,1))

for i in range(number):

theta = theta - (alpha/m) * x.T.dot(h-y)

h = hypoFunction(x, theta)

J_history[i] = costFunction(h,y)

print(theta)

return h

def paint(x,y,hypothesis):

plt.plot(x,y,"ro")

plt.plot(x,hypothesis)

plt.show()

def main():

x = np.array([[1,1], [1,2], [1,3], [1,4], [1,5], [1,6]])

y = np.array([[1], [2], [3], [4], [5], [6]])

theta = np.array([[10],[0]])

alpha = 0.1

h = hypoFunction(x, theta)

J = costFunction(h, y)

h= gradientDecent(x, y, h, theta, alpha, 20000)

x = x[:,-1]

print(x)

paint(x,y,h)

pass

if __name__ == "__main__":

main()

简单解释

  1. 因为设置了两个theta,为了方便运算以及满足矩阵乘法的要求,所以x多添加了一列1。
  2. theta初始值可以任意设置。
  3. alpha大小初始值不要过大,否则有可能导致梯度下降函数不收敛。如果初始值过小,则会导致需要计算很多次才能达到全局最优解。

以上是 机器学习:单元线性回归(python简单实现) 的全部内容, 来源链接: utcz.com/z/387480.html

回到顶部