Sklearn (一) 监督学习
本系列博文是根據SKlearn的一個學習小結,并非原創!
?1.直接學習TensorFlow有點不知所措,感覺需要一些基礎知識做鋪墊。
?2.之前機器學習都是理論《Ng機器學習基礎》+底層編寫《機器學習實戰》,現實生活基本用不到。
?3.會增加一些個人總結,也會刪除一些以前學過的知識。
?
??
| 廣義線性模型 |
1.1 普通最小二乘法
然而,對于普通最小二乘的系數估計問題,其依賴于模型各項的相互獨立性。當各項是相關的,且設計矩陣??的各列近似線性相關,那么,設計矩陣會趨向于奇異矩陣,這會導致最小二乘估計對于隨機誤差非常敏感,產生很大的方差。例如,在沒有實驗設計的情況下收集到的數據,這種多重共線性(multicollinearity)的情況可能真的會出現。
Example:
SK的數據集介紹:https://blog.csdn.net/sa14023053/article/details/52086695,暫時用不到那么多,用到什么看什么吧!
1 import matplotlib.pyplot as plt 2 import numpy as np 3 from sklearn import datasets, linear_model 4 from sklearn.metrics import mean_squared_error, r2_score 5 ''' 6 這是一個糖尿病的數據集, 7 主要包括442行數據,10個屬性值 8 分別是:Age(年齡)、 9 性別(Sex)、 10 Body mass index(體質指數)、 11 Average Blood Pressure(平均血壓)、 12 S1~S6一年后疾病級數指標。 13 Target為一年后患疾病的定量指標。 14 ''' 15 diabetes = datasets.load_diabetes() 16 17 18 # 取其中的一個數據進行試驗 19 # https://blog.csdn.net/lanchunhui/article/details/49725065, 20 # np.newaxis的含義和分析,其中也可以寫作下面的形式: 21 # diabetes.data[:,2][:,np.newaxis] 或者 diabetes.data[:,2][:,None] 22 # 目的為了增加一個軸 23 diabetes_X = diabetes.data[:, np.newaxis, 2] #(442,10) 24 25 # Split the data into training/testing sets 26 diabetes_X_train = diabetes_X[:-20] 27 diabetes_X_test = diabetes_X[-20:] 28 29 # Split the targets into training/testing sets 30 diabetes_y_train = diabetes.target[:-20] 31 diabetes_y_test = diabetes.target[-20:] 32 33 # Create linear regression object 34 regr = linear_model.LinearRegression() 35 36 # Train the model using the training sets 37 regr.fit(diabetes_X_train, diabetes_y_train) 38 39 # Make predictions using the testing set 40 diabetes_y_pred = regr.predict(diabetes_X_test) 41 42 # The coefficients,打印權重 43 print('Coefficients: \n', regr.coef_) 44 # The mean squared error,損失函數 45 print("Mean squared error: %.2f" 46 % mean_squared_error(diabetes_y_test, diabetes_y_pred)) 47 # Explained variance score: 1 is perfect prediction 48 print('Variance score: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred)) 49 50 # Plot outputs 51 plt.scatter(diabetes_X_test, diabetes_y_test, color='black') 52 plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3) 53 54 #plt.xticks()/plt.yticks()設置軸記號 55 #現在是明白干嘛用的了,就是人為設置坐標軸的刻度顯示的值 56 ''' 57 plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], 58 [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$']) 59 plt.yticks([-1, 0, +1], 60 [r'$-1$', r'$0$', r'$+1$']) 61 ''' 62 #plt.xticks(()) 63 #plt.yticks(()) 64 65 plt.show()
1.2 嶺回歸
注釋:就是加了一個懲罰項,防止過擬合~~
Exanple和簡單線性回歸一樣的表達~~
1 >>> from sklearn import linear_model 2 >>> reg = linear_model.Ridge (alpha = .5) 3 >>> reg.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) 4 Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None, 5 normalize=False, random_state=None, solver='auto', tol=0.001) 6 >>> reg.coef_ 7 array([ 0.34545455, 0.34545455]) 8 >>> reg.intercept_ 9 0.13636...1.3 貝葉斯嶺回歸
?
訓練數據:
1 >>> from sklearn import linear_model 2 >>> X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]] 3 >>> Y = [0., 1., 2., 3.] 4 >>> reg = linear_model.BayesianRidge() 5 >>> reg.fit(X, Y) 6 BayesianRidge(alpha_1=1e-06, alpha_2=1e-06, compute_score=False, copy_X=True, 7 fit_intercept=True, lambda_1=1e-06, lambda_2=1e-06, n_iter=300, 8 normalize=False, tol=0.001, verbose=False)預測數據:
>>> reg.predict ([[1, 0.]]) array([ 0.50000013])查看權重:
>>> reg.coef_ array([ 0.49999993, 0.49999993])?
?
?
?
?
?
?
?
?
?
?
?
參考:
http://sklearn.apachecn.org/cn/0.19.0/modules/linear_model.html
https://blog.csdn.net/eastmount/article/details/52929765
http://cwiki.apachecn.org/pages/viewpage.action?pageId=10814293
http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge
?
轉載于:https://www.cnblogs.com/wjy-lulu/p/9054740.html
總結
以上是生活随笔為你收集整理的Sklearn (一) 监督学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Exp8 web基础 20154301仉
- 下一篇: TensorFlow Java+ecli