題目是:
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核心 以達...