机器学习第四课_线性回归

我们所谓的建模过程,其实就是找到一个模型,最大程度的拟合我们的数据。 在简单线回归问题中,模型就是我们的直线方程:y = ax + b 。

要想最大的拟合数据,本质上就是找到没有拟合的部分,也就是损失的部分尽量小,就是损失函数(loss function)(也有算法是衡量拟合的程度,称函数为效用函数(utility function)):

因此,推导思路为:

通过分析问题,确定问题的损失函数或者效用函数;

然后通过最优化损失函数或者效用函数,获得机器学习的模型

近乎所有参数学习算法都是这样的套路,区别是模型不同,建立的目标函数不同,优化的方式也不同。

回到简单线性回归问题,目标:

[if !vml]

[endif]










###简单线性回归算法的实现

 

import numpy as np

import matplotlib.pyplot as plt


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

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


plt.scatter(x,y)

plt.axis([0,6,0,6])

plt.show()


# 首先要计算x和y的均值

x_mean = np.mean(x)

y_mean = np.mean(y)


# a的分子num、分母d


num = 0.0

d = 0.0

for x_i,y_i in zip(x,y):   # zip函数打包成[(x_i,y_i)...]的形式

   num = num + (x_i - x_mean) * (y_i - y_mean)

    d= d + (x_i - x_mean) ** 2

a = num / d

b = y_mean - a * x_mean


y_hat = a * x + b


plt.scatter(x,y)    #绘制散点图

plt.plot(x,y_hat,color='r')    #绘制直线

plt.axis([0,6,0,6])

plt.show()




x_predict = 6

y_predict = a * x_predict + b

print(y_predict)




##向量化运算


import numpy as np

import time


a = np.random.rand(1000000)

b = np.random.rand(1000000)


tic = time.time()

c = np.dot(a, b)

toc = time.time()

print("c: %f" % c)

print("vectorized version:" +str(1000*(toc-tic)) + "ms")



c = 0

tic = time.time()


for i in range(1000000):

    c+= a[i] * b[i]

toc = time.time()


print("c: %f" % c)

print("for loop:" +str(1000*(toc-tic)) + "ms")

你可能感兴趣的:(机器学习第四课_线性回归)