假設這樣當給出新的
目標: x 和 y 都是已知的 , 需要求出 a:斜率 、b:截距。
最小二乘法(最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。)
誤差的平方:
將損失函式。
最小二乘法:
稱這個損失函式為
對
就是根據推到得到,當
通過傳入 x_train ,y_train ,求出 a 和 b ; 並且可以當給定新的 x (向量)時候,**出新的 y。
import numpy as np
class ******linearregression1:
def __init__(self):
'''初始化 ****** linear regression 模型'''
self.a_ = none
self.b_ = none
def fit(self , x_train , y_train):
assert x_train.ndim ==1
assert x_train.shape[0] == y_train.shape[0]
num = 0
d = 0
for x_i ,y_i in zip(x_train,y_train):
num += (x_i -np.mean(x_train)) *(y_i -np.mean(y_train))
d += (x_i - np.mean(x_train))**2
self.a_ = num/d
self.b_ = np.mean(y_train) - self.a_ *np.mean(x_train)
return self
def predict(self ,x_predict ):
assert x_predict.ndim == 1
assert self.a_ is not none and self.b_ is not none
return np.array([self._predict(x) for x in x_predict])
def _predict(self,x_single):
return self.a_ *x_single +self.b_
def __repr__(self):
return "******linearregression1()"
在上面的演算法中,求 a 的方法是使用 for 迴圈;可以改進為使用 向量的點乘 來加快演算法的運算速度。
點乘:兩個向量的點乘 ,每個對應的元素 相乘 再 相加。
觀察a 的分子分母 ,可以發現分子分母實際都是 兩個向量點乘的結果 ;
只需要改動 原**中 fit 部分即可,其餘**保持不變:
def fit(self , x_train , y_train):
assert x_train.ndim ==1
assert x_train.shape[0] == y_train.shape[0]
x_mean = np.mean(x_train)
y_mean = np.mean(y_train)
num = (x_train-x_mean).dot(y_train-y_mean)
d = (x_train-x_mean).dot(x_train-x_mean)
self.a_ = num/d
self.b_ = y_mean - self.a_ *x_mean
return self
TensorFlow實現乙個簡單線性回歸的例子
1 author wsx 2import tensorflow as tf 3import numpy as np 4import matplotlib.pyplot as plt 56 x data np.linspace 0.5,0.5,200 np.newaxis 0.5 0.5 之間產生20...
sklearn學習筆記之簡單線性回歸
線性回歸是資料探勘中的基礎演算法之一,從某種意義上來說,在學習函式的時候已經開始接觸線性回歸了,只不過那時候並沒有涉及到誤差項。線性回歸的思想其實就是解一組方程,得到回歸函式,不過在出現誤差項之後,方程的解法就存在了改變,一般使用最小二乘法進行計算。sklearn對data mining的各類演算法...
機器學習回歸篇 簡單線性回歸
之前的幾篇裡面講了機器學習分類問題的一些演算法,下面幾篇來講一下回歸問題。回歸問題和分類問題有什麼區別呢?分類問題 的結果是一些類別值,比如說,顏色類別,電腦品牌,有無信譽等。回歸問題 的是連續型的數值,如房價,人數,降雨量等等 生活中我們做決定的過程通常是根據兩個或多個變數之間的關係,解決回歸問題...