(1)嶺回歸 —— 標準方程法
import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt
# 讀入資料
data =
genfromtxt
(r"longley.csv"
,delimiter=
',')
# 切分資料
x_data = data[1:
,2:]
y_data = data[1:
,1,np.newaxis]
# 給樣本新增偏置項
x_data = np.
concatenate
((np.
ones((
16,1)
),x_data)
,axis=1)
# 嶺回歸標準方程法求解回歸引數
def weights
(xarr, yarr, lam=
0.2)
: xmat = np.
mat(xarr)
ymat = np.
mat(yarr)
xtx = xmat.t*xmat # 矩陣乘法
rxtx = xtx + np.
eye(xmat.shape[1]
)*lam
# 計算矩陣的值,如果值為0,說明該矩陣沒有逆矩陣
if np.linalg.
det(rxtx)
==0.0
:print
("this matrix cannot do inverse"
)return
# xtx.i為xtx的逆矩陣
ws = rxtx.i*xmat.t*ymat
return ws
ws =
weights
(x_data,y_data)
print
(ws)
輸出:
# 計算**值
np.mat
(x_data)
*np.
mat(ws)
輸出:
(2)嶺回歸 —— sklearn
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt
# 讀入資料
data =
genfromtxt
(r"longley.csv"
,delimiter=
',')
# 切分資料
x_data = data[1:
,2:]
y_data = data[1:
,1]# 建立模型
# 生成50個值
alphas_to_test = np.
linspace
(0.001,1
)# 建立模型,儲存誤差值
model = linear_model.
ridgecv
(alphas=alphas_to_test, store_cv_values=true)
model.
fit(x_data, y_data)
# 嶺係數
print
(model.alpha_)
# loss值
print
(model.cv_values_.shape)
輸出:
# 畫圖
# 嶺係數跟loss值的關係
plt.
plot
(alphas_to_test, model.cv_values_.
mean
(axis=0)
)# 選取的嶺系數值的位置
plt.
plot
(model.alpha_,
min(model.cv_values_.
mean
(axis=0)
),'ro'
)plt.
show
()
輸出:
)輸出:
● 資料集:「lingley.csv」:
""
,"gnp.deflator"
,"gnp"
,"unemployed"
,"armed.forces"
,"population"
,"year"
,"employed"
"1947",83
,234.289
,235.6
,159
,107.608
,1947
,60.323
"1948"
,88.5
,259.426
,232.5
,145.6
,108.632
,1948
,61.122
"1949"
,88.2
,258.054
,368.2
,161.6
,109.773
,1949
,60.171
"1950"
,89.5
,284.599
,335.1
,165
,110.929
,1950
,61.187
"1951"
,96.2
,328.975
,209.9
,309.9
,112.075
,1951
,63.221
"1952"
,98.1
,346.999
,193.2
,359.4
,113.27
,1952
,63.639
"1953",99
,365.385
,187
,354.7
,115.094
,1953
,64.989
"1954"
,100
,363.112
,357.8
,335
,116.219
,1954
,63.761
"1955"
,101.2
,397.469
,290.4
,304.8
,117.388
,1955
,66.019
"1956"
,104.6
,419.18
,282.2
,285.7
,118.734
,1956
,67.857
"1957"
,108.4
,442.769
,293.6
,279.8
,120.445
,1957
,68.169
"1958"
,110.8
,444.546
,468.1
,263.7
,121.95
,1958
,66.513
"1959"
,112.6
,482.704
,381.3
,255.2
,123.366
,1959
,68.655
"1960"
,114.2
,502.601
,393.1
,251.4
,125.368
,1960
,69.564
"1961"
,115.7
,518.173
,480.6
,257.2
,127.852
,1961
,69.331
"1962"
,116.9
,554.894
,400.7
,282.7
,130.081
,1962
,70.551
機器學習之監督學習 回歸
回歸問題和 分類問題的區別在於 其待 的目標是 連續變數 線性回歸器 如果面對訓練資料十分龐大的任務,隨機梯度法不論是在分類還是在回歸問題上都表現得十分高效,可以在不損失過多效能的前提下,節省大量計算時間 根據scikit learn官網的建議,如果資料規模超過10萬,推薦使用隨機梯度估計引數模型 ...
機器學習之有監督學習 回歸
線性回歸.py import matplotlib.pyplot as plt import numpy as np from sklearn import linear model 讀取資料集 datasets x 房屋尺寸 datasets y 房屋 fr open prices.txt r l...
AI 機器學習 監督學習 邏輯回歸
邏輯回歸和線性回歸不太一樣,邏輯回歸做的是分類。其實和線性回歸都是廣義線性模型 generalizedlinear model 這一家族中的模型形式基本上都差不多,不同的就是因變數不同。這類監督學習的總體思路如下 1 確定 函式,就是樣本和 結果的大致關係的函式,線性回歸是線性方程或者多項式方程,邏...