改-机器学习-决策树(Python实现)

改-机器学习-线性回归(Python实现)

线性回归

  • 线性回归(Linear regression):从小就知道的表达式Y=aX+b,代表了x与y存在线性的关系,不再赘述。

实现原理

  • 使用随机梯度下降法(stochastic gradient descent)去估计参数.
  • SGD是梯度下降法的变种,区别在于训练时样本的使用方法不同.
  • 它每次使用一个样本去计算当前的梯度并进行参数的更新.

Python 代码

trees.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# Make a prediction with coefficients
# 使用参数进行预测
def predict(row, coefficients):
yhat = coefficients[0]
for i in range(len(row)-1):
yhat += coefficients[i + 1] * row[i]
return yhat

# Estimate linear regression coefficients using stochastic gradient descent
# 使用随机梯度下降法估计线性回归模型的系数
def coefficients_sgd(train, l_rate, n_epoch):
coef = [0.0 for i in range(len(train[0]))]
for epoch in range(n_epoch):
sum_error = 0
for row in train:
yhat = predict(row, coef)
error = yhat - row[-1]
sum_error += error**2
coef[0] = coef[0] - l_rate * error
for i in range(len(row)-1):
coef[i + 1] = coef[i + 1] - l_rate * error * row[i]
print('>epoch=%d, lrate=%.3f, error=%.3f' % (epoch, l_rate, sum_error))
return coef

# Calculate coefficients 计算系数
# 数据 [x,y] y = x - 0.5
dataset = [[3, 2.5], [5, 4.5], [10, 9.5], [11, 10.5], [21, 20.5]]
# 学习率
l_rate = 0.001
# 迭代次数
n_epoch = 2500
# 进行估计计算
coef = coefficients_sgd(dataset, l_rate, n_epoch)
print(coef)