(斯坦福機器學習筆記)線性回歸練習

2021-07-25 08:27:28 字數 2872 閱讀 3565

題目是:

import numpy as np

import random

import matplotlib.pyplot as plt

f64 = 'float64'

defgen_linear_dot_sample

(num_point):

x = list(range(num_point))

for i in range(num_point):

x[i] = x[i] / num_point

y = x.copy()

for i in range(num_point):

y[i]=y[i]+random.uniform(-0.08,0.08)

return [x,y]

[x,y]=gen_linear_dot_sample(50)

生成了50個樣本點,如下圖

試用線性回歸求出最佳擬合的直線

********************=分割線***********************************====

**如下:

import numpy as np

import random

import matplotlib.pyplot as plt

f64 = 'float64'

defgen_linear_dot_sample

(num_point):

x = list(range(num_point))

for i in range(num_point):

x[i] = x[i] / num_point

y = x.copy()

for i in range(num_point):

y[i]=y[i]+random.uniform(-0.08,0.08)

return [x,y]

defshow_point

(p_x,p_y):

plt.figure(1)

plt.plot(p_x,p_y,'ob')

plt.xlim(-0.2,1.2)

plt.ylim(-0.2,1.2)

plt.xlabel('x')

plt.ylabel('y')

plt.show()

defshow_point_and_line

(p_x,p_y,l_x,l_y):

plt.figure(1)

plt.plot(p_x,p_y,'ob')

plt.plot(l_x,l_y,'r')

plt.xlim(-0.2,1.2)

plt.ylim(-0.2,1.2)

plt.xlabel('x')

plt.ylabel('y')

plt.show()

deflinear_re

(x,y,study_rate,times_iteration):

y=y.reshape(y.shape[0],1).astype(f64)

if x.ndim == 1:

x=x.reshape((x.shape[0],1))

one_mat = np.ones((x.shape[0],1),dtype=f64)

x_add_one = np.hstack((one_mat,x))

theta = np.random.random((x.shape[1]+1))

theta=theta.astype(f64).reshape(x.shape[1]+1,1)

theta_init=theta

print('初始化後,theta的值是:','b=',theta[0,0],'k=',theta[1,0])

for i in range(times_iteration):

diff_cost = ((np.dot(x_add_one,theta)-y)*x_add_one)

diff_cost=diff_cost.sum(0,dtype=f64,keepdims=1).transpose()

diff_cost_mean = diff_cost/x.shape[0]

theta = theta-diff_cost_mean*study_rate

print('迭代後得到的theta的值是:','b=',theta[0,0],'k=',theta[1,0])

return [theta_init,theta]

[x,y]=gen_linear_dot_sample(50)

[theta_init,theta]=linear_re(np.asarray(x,dtype=f64),np.asarray(y,dtype=f64),0.25,200)

show_point_and_line(x,y,x,theta_init[0]+theta_init[1]*x)

show_point_and_line(x,y,x,theta[0]+theta[1]*x)

初始化後,得到的直線是這樣

線性回歸後,得到直線

初始化後,theta的值是: b= 0.134382446993 k= 0.553982228195

迭代後得到的theta的值是: b= 0.00249451906385 k= 0.973867674154

斯坦福機器學習筆記五

有時候發現訓練出來的模型誤差很大,會有很多解決辦法。例如 增加更多的訓練樣本,減少特徵數目,增加特徵數目,增加多項式特徵,減小或增大正則化引數 的值 但是這些嘗試往往會浪費很多時間,所有這裡提出了一種機器學習診斷法。1 資料的分配 將資料分為三部分,訓練集 60 交叉驗證集 20 和測試集 20 利...

斯坦福機器學習筆記十

這裡以電影推薦的栗子來說明什麼是推薦系統。nu 代表使用者的數量 nm 代表電影的數量 r i,j 如果使用者給電影評過分,則r i,j 1 y ij 代表使用者i給電影j的評分 mj 代表使用者j評過分的電影總數 j 代表使用者j的引數向量 x i 代表電影i的特徵向量 如圖所示,推薦系統能夠幫我...

斯坦福機器學習筆記十二

由於大規模資料集求最優解,計算量非常大,對於這樣的問題,如果能夠將資料集分配給多台計算機,讓每台計算機處理資料集的乙個子集,然後將計算結果彙總再求和,這樣的方法叫做對映簡化。如果任何學習演算法能夠表達為,對訓練集的函式求和,那麼就能將這個任務分配給多台 計算機 或者同一臺計算機的不同cpu核心 以達...