數據科學必備基礎之線性回歸 [Python 最小平方估測法](Python_polynomial_Least_Squares)
數據科學必備基礎之線性回歸 [Python 最小平方估測法](Python_polynomial_Least_Squares)
資料來源:https://mp.weixin.qq.com/s/-z4QaxgOcxSLAdionlzWLw
GITHUB: https://github.com/jash-git/Python_polynomial_Least_Squares
· 什麼是線性回歸
就是需要找到一個能夠很好地將某些特徵映射到其他特徵的函數。依賴特徵稱為因變量,獨立特徵稱為自變量。
通常用y表示因變量,x表示自變量。如果有兩個或者多個自變量,可以用向量x=(x 1 , …, x r )表示。
· 線性回歸的用途
通常,回歸被用來回答某些現像是否會對其他現象產生影響,或者說,幾個變量之間是否存在關聯。例如,可以用回歸的方法確定工作經驗或者性別是否在某種程度上影響到工資水平。
用新的自變量數據集去預測因變量時,回歸也是非常有用的。舉個例子,已知室外氣溫,一天的某個時間,以及家里居住的人數,可以試著預測下一個小時的家庭用電量。
回歸可用於許多領域:經濟,IT,社會科學等等。隨著大量數據的可獲取性提升以及人們對於數據的實用價值認知的提高,回歸變得越來越重要了。
· 線性回歸的原理
通常使用最小化殘差平方和的方法來計算最優權重,即最小化SSR=∑ i (y i -f(x i )) 2。這種方法叫做最小二乘法OLS。
· 在Python中實現線性回歸
numpy是一款基礎Python包,它可以在單維和多維數組上進行高效的操作。它還提供很多數值計算方法,同時也是開源庫。
如果不熟悉numpy,可以閱讀官方的numpy使用指南,此外還有numpy相關的文章會在附錄中提供。網絡上還有大量的numpy資料可供搜索。
scikit-learn是一個被大量用戶用於機器學習的Python庫,該庫是基於numpy和其他庫建立的。它可以執行數據預處理,降維,回歸,分類和聚類等功能。和numpy一樣,scikit-learn也是開源的。
可以在scikit-learn官網上查看Generalized Linear Models頁面了解更多關於線性模型的內容以進一步了解該庫的原理。
statsmodels庫可以實現一些在做線性回歸時scikit-learn中沒有的功能。它也是一個不錯的Python庫,主要用於統計模型的估計,模型的測試等等。同時它也是開源的。
#--------------------------# #Step 1:导入相关库和类 import pandas as pd import tushare as ts from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures #--------------------------# #--------------------------# #Step 2:读取数据 # 获取沪深300,中金细分金融指数2018年全年日线数据及2019年前7个交易日数据 index_hs300 = pro.index_daily(ts_code='399300.SZ', start_date='20180101', end_date='20190110') index_finance = ts.pro_bar(ts_code='000818.CSI', freq='D', asset='I', start_date='20180101', end_date='20190110') index_hs300_pct_chg = index_hs300.set_index('trade_date')['pct_chg'] index_finance_pct_chg = index_finance.set_index('trade_date')['pct_chg'] df = pd.concat([index_hs300_pct_chg, index_finance_pct_chg], keys=['y_hs300', 'x_finance'], join='inner', axis=1, sort=True) df_existing_data = df[df.index < '20190101'] x = df_existing_data[['x_finance']] y = df_existing_data['y_hs300'] #--------------------------# #--------------------------# #Step 3:自变量转换 transformer = PolynomialFeatures(degree=2, include_bias=False) transformer.fit(x) x_ = transformer.transform(x) #--------------------------# #--------------------------# #Step 4:建立模型并拟合数据 model = LinearRegression().fit(x_, y) #--------------------------# #--------------------------# #Step 5:输出结果 r_sq = model.score(x_, y) print('coefficient of determination:', r_sq) print('intercept:', model.intercept_) print('coefficients:', model.coef_) #--------------------------#