机器学习的目标
1.从数据中学习新的概念
2.连续值预测
连续值预测问题
这个蓝色的线就是股市的实际变化曲线,我们机器学习需要做的就是预测那个黄色的线
我们看一个例子
我们已知函数的公式,最后面那个是高斯噪声,那些红点就是我们利用这个公式画出来的。
但是现实生活中,我们往往只知道这个图像,但是不知道公式。所以机器学习的目的就是用于预测
线性回归问题步骤
1.计算 loss,我们根据给定的坐标点来进行计算
比如我们有100个坐标点,可以使用下面这样方法来计算
这个w0和b0其实是我们随机出来的点,·我们第一步的代码如下
points[i,0] 实际上就相当于访问二维数组。
2.计算w和b
首先计算求导,我们这里可以对平方来进行求导
对b的求导其实也是一样的
这个计算起来更简单一些,最后具体实现的代码如下
3.这一步我们就是不断循环把我们获取到的新的w和b的值赋值给原来的w和b值,然后我们利用这个新的值再次进行计算,一般情况下需要跑几千次或者几万次
最后我们把获取到的这个值进行预测
实战环节
代码在github上有,可以自行下载。。
先展示效果,这里我们经过1000多次的计算,得到的结果和误差,这里可以看到我们的误差减小了很多
实际代码如下
import numpy as np
# 第一步,计算loss
# y = wx + b
def compute_error_for_line_given_points(b, w, points):
totalError = 0
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
# computer mean-squared-error
totalError += (y - (w * x + b)) ** 2
# average loss for each point
return totalError / float(len(points))
# 第二部计算和更新w和b
def step_gradient(b_current, w_current, points, learningRate):
b_gradient = 0
w_gradient = 0
N = float(len(points))
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
# grad_b = 2(wx+b-y)
b_gradient += (2 / N) * ((w_current * x + b_current) - y)
# grad_w = 2(wx+b-y)*x
w_gradient += (2 / N) * x * ((w_current * x + b_current) - y)
# update w
new_b = b_current - (learningRate * b_gradient)
new_w = w_current - (learningRate * w_gradient)
return [new_b, new_w]
# 这里我们就开始不断循环计算
def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):
b = starting_b
w = starting_w
# update for several times
for i in range(num_iterations):
b, w = step_gradient(b, w, np.array(points), learning_rate)
return [b, w]
def run():
# 我们这里先加载文件
points = np.genfromtxt("data.csv", delimiter=",")
learning_rate = 0.0001
# 初始的b和w的值
initial_b = 0 # initial y-intercept guess
initial_w = 0 # initial slope guess
# 计算次数
num_iterations = 1000
# 这里我们计算初始误差
print("Starting gradient descent at b = {0}, w = {1}, error = {2}"
.format(initial_b, initial_w,
compute_error_for_line_given_points(initial_b, initial_w, points))
)
print("Running...")
[b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)
# 下面这里我们是计算完毕后得出计算结果
print("After {0} iterations b = {1}, w = {2}, error = {3}".
format(num_iterations, b, w,
compute_error_for_line_given_points(b, w, points))
)
if __name__ == '__main__':
run()
的