:真實值、**值、所有真實值的平均值
兩個係數都是用來衡量模型的線性程度
學習率:調節每一次梯度下降的步長,如下圖:
學習率太小,時間過長;學習率太大,得不到非常近似的全域性最小值。
:=就是將右邊的式子賦值給左邊,對代價函式求導(兩個變數,偏導),以此改變初始化的θ
j\theta_j
θj的值
凸函式的兩個定義:
下面是兩個定義的等價性證明:
簡單的梯度下降**:
import numpy as np
data = np.genfromtxt(
"data.csv"
,delimiter=
",")
x_data = data[:,
0]y_data = data[:,
1]#learning rate
lr =
0.001
#bias
b =0
#slope
k =0
epochs =
50m =
int(
len(x_data)
)def
cost_function
(x_data,y_data,b,k,m)
: errors =
0#這裡要初始化
for i in
range(0
,m):
h = k * x_data[i]
+ b errors +=
(y_data[i]
- h)**2
cost = errors /(2
*m)return cost
# gradient descent
defgradinet_descent
(b,k,x_data,y_data,m,epochs,lr)
:#pd_k = 0
#pd_b = 0
#寫在這裡是不對的,每乙個epoch重複更新一次,也要重新從初值(這裡為0)處迭代完所有資料
for i in
range
(epochs)
: pd_k =
0 pd_b =
0for j in
range(0
,m):
h = k * x_data[i]
+ b pd_k +=
(h - y_data[j]
) pd_b +=
(h - y_data[j]
)* x_data[i]
k += lr *(1
/m)* pd_k
b += lr *(1
/m)* pd_b
return b k
我們也可以使用封裝好的模組實現梯度下降:
sklearn模組安裝:
from sklearn.linear_model import linearregression
import numpy as np
import matplotlib as plt
#匯入資料
data = np.genfromtxt(
'data.csv'
,delimiter=
',')
x_data = data[:,
0]y_data = data[:,
1]#x_data.shape = (100,)
#處理資料,增加乙個維度,適應sklearn
x_data = x_data[
:,np.newaxis]
y_data = y_data[
:,np.newaxis]
#x_data.shape = (100,1)
#建立並擬合模型
model = linearregression(
)#建立類
model.fit(x_data,y_data)
#模型做訓練,訓練好之後就可以用predict方法畫出訓出來模型做的**值
plt.plot(x_data,y_data,
'b')
plt.plot(x_data,model.predict(x_data)
,'r'
)#**的y_data
plt.show(
)
線性回歸的一些思考(SVM)
1 對於線性回歸模型的代價函式,為了能應用求導來求其最小值 代價函式可導 不能用錯誤的分類個數作為代價函式 不可導 又或者用s函式 非凸函式,不能應用梯度下降,轉化為log凸函式 簡單的做法就是轉化為距離 統計學習方法書中提到的 或者機器學習課堂上講到的幾種形式,這些形式都可導。2 線性模型中,對於...
線性回歸的一些思考(SVM)
線性回歸的一些思考 svm 1 對於線性回歸模型的代價函式,為了能應用求導來求其最小值 代價函式可導 不能用錯誤的分類個數作為代價函式 不可導 又或者用s函式 非凸函式,不能應用梯度下降,轉化為log凸函式 簡單的做法就是轉化為距離 統計學習方法書中提到的 或者機器學習課堂上講到的幾種形式,這些形式...
一些基礎概念的總結。。。。
寫程式如寫作文?先學語法,學三種流程結構。就相當於寫作文之前學字,句子。但是只會字和句子寫不了作文。想寫東西,有想法。寫程式也是要先要有想法,有了想法才能寫下去。分析為王 物件導向問題分析 分析步驟 找物件 找物件的變數和方法 狀態和行為 通過分析物件中相同的變數和方法,抽象出類 找類和類之間的關係...