監督學習1——迴歸

監督學習:有標記

非監督學習:無標記

1.線性迴歸

線性迴歸的目標是提取輸入變量與輸出變量的關聯線性模型,這就要求實際輸出與線性方程預測的輸出的殘差平方和(sum of squares of differences)最小化。這種方法被稱爲普通最小二乘法Ordinary Least SquaresOLS

from sklearn.linear_model  import LinearRegression

# 創建線性迴歸對象
linear_regressor = LinearRegression()
# 用訓練數據集訓練模型
linear_regressor.fit(X_train, y_train)

#查看擬合效果

import matplotlib.pyplot as plt
y_train_pred = linear_regressor.predict(X_train)
plt.figure()
plt.scatter(X_train, y_train, color='green')
plt.plot(X_train, y_train_pred, color='black', linewidth=4)
plt.title('Training data')

plt.show()


用模型對測試數據集進行預測,然後畫出來看看,代碼如下所示:
y_test_pred = linear_regressor.predict(X_test)
plt.scatter(X_test, y_test, color='green')
plt.plot(X_test, y_test_pred, color='black', linewidth=4)
plt.title('Test data')
plt.show()

模型評估指標:

平均絕對誤差( mean absolute error:這是給定數據集的所有數據點的絕對誤差平均值。
均方誤差( mean squared error:這是給定數據集的所有數據點的誤差的平方的平均值。這是最流行的指標之一。
中位數絕對誤差( median absolute error:這是給定數據集的所有數據點的誤差的中位數。這個指標的主要優點是可以消除異常值(outlier)的干擾。測試數據集中的單個壞點不會影響整個誤差指標,均值誤差指標會受到異常點的影響。
解釋方差分( explained variance score:這個分數用於衡量我們的模型對數據集波動的解釋能力。如果得分1.0分,那麼表明我們的模型是完美的。
R方得分( R2 score:這個指標讀作“R,是指確定性相關係數,用於衡量模型對未知樣本預測的效果。最好的得分是1.0,值也可以是負數。

值。
import sklearn.metrics as sm
print "Mean absolute error =", round(sm.mean_absolute_error(y_test, y_test_pred), 2)
print "Mean squared error =", round(sm.mean_squared_error(y_test, y_ test_pred), 2)
print "Median absolute error =", round(sm.median_absolute_error(y_ test, y_test_pred),
2)
print "Explained variance score =", round(sm.explained_variance_ score(y_test,
y_test_pred), 2)
print "R2 score =", round(sm.r2_score(y_test, y_test_pred), 2)
通常的做法是儘量保證均方誤差最低,而且解釋方差分最高。

保存模型數據

import cPickle as pickle
output_model_file = 'saved_model.pkl'
with open(output_model_file, 'w') as f:
    pickle.dump(linear_regressor, f)

使用模型數據

with open(output_model_file, 'r') as f:
    model_linregr = pickle.load(f)
y_test_pred_new = model_linregr.predict(X_test)
print "\nNew mean absolute error =", round(sm.mean_absolute_ error(y_test,
y_test_pred_new), 2)


2.嶺迴歸

線性迴歸的主要問題是對異常值敏感。在真實世界的數據收集過程中,經常會遇到錯誤的度量結果。而線性迴歸使用的普通最小二乘法,其目標是殘差平方和最小化。這時,由於異常值誤差的絕對值很大,因此會引起問題,從而破壞整個模型。爲了避免這個問題,我們引入正則化項的係數作爲閾值來消除異常值的影響。這個方法被稱爲嶺迴歸

創建嶺迴歸器:

ridge_regressor = linear_model.Ridge(alpha=0.01, fit_ intercept=True,max_iter=10000)

alpha參數控制迴歸器的複雜程度。當alpha趨於0時,嶺迴歸器就是用普通最小二乘法的線性迴歸器。因此,如果你希望模型對異常值不那麼敏感,就需要設置一個較大的alpha值。這裏把alpha值設置爲0.01

模型訓練等與線性迴歸同。

3.多項式迴歸

當數據點本身的模式中帶有自然的曲線時,而線性模型是不能捕捉到這一點的。多項式則可以,多項式模型的曲率是由多項式的次數決定的。隨着模型曲率的增加,模型變得更準確。但是,增加曲率的同時也增加了模型的複雜性,因此擬合速度會變慢。

from sklearn.preprocessing import PolynomialFeatures
polynomial = PolynomialFeatures(degree=3) #degree爲多項式次數
X_train_transformed = polynomial.fit_transform(X_train)
poly_linear_model = linear_model.LinearRegression()
poly_linear_model.fit(X_train_transformed, y_train)







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章