[Python]通過n次多項式線性回歸計算擬合度估算銷售額

本文基于Python3+
緣由是看到微博上某程序員通過計算擬合度估算出某貓2019雙十一的銷售額,與現(xiàn)實結果相差無幾,本著試一試的態(tài)度,也想復現(xiàn)一下結果,而且預測下2020/2021的銷售額
直接的線性回歸沒有太多的參考意義,所以從2次多項式計算到9次多項式的擬合度,代碼過程比較簡單,就是想得到結果,有興趣的朋友,直接復制代碼就能跑了


圖表.png
#!/usr/bin/python3

import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression  # 導入線性回歸模型
from sklearn.preprocessing import PolynomialFeatures  # 導入多項式回歸模型

# 字體
myfont = fm.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
plt.title('樣本', fontproperties=myfont)  # 圖像標題
plt.xlabel('年', fontproperties=myfont)  # x軸文本
plt.ylabel('銷售額', fontproperties=myfont)  # y軸文本
plt.grid(True)  # 是否繪制網(wǎng)格線

X = [[2009], [2010], [2011], [2012], [2013], [2014], [2015], [2016], [2017], [2018], [2019]]
y = [[0.5], [9.36], [33.6], [191], [350], [571], [912], [1207], [1682], [2135], [2684]]
# 訓練數(shù)據(jù)
X_train = X[:-2]
y_train = y[:-2]
# 做擬合度的數(shù)據(jù)取訓練數(shù)據(jù)的最后兩個
X_test = X[-2:]
y_test = y[-2:]

# 繪制散點圖
plt.scatter(X, y, marker='*', color='blue', label='樣本')
plt.scatter(X, y, color='blue')

# 線性回歸
lin = LinearRegression()
lin.fit(X, y)
plt.plot(X, lin.predict(X), color='green')


def lineReg():
    for k in range(2, 10):
        # 實例化一個n次多項式特征實例
        k_featurizer = PolynomialFeatures(degree=k)
        # 用n次多項式對樣本X值做變換
        X_train_k = k_featurizer.fit_transform(X_train)
        # 創(chuàng)建一個線性回歸實例
        regressor_k = LinearRegression()
        # 以n次多項式變換后的X值作為輸入,帶入線性回歸模型做訓練
        regressor_k.fit(X_train_k, y_train)
        # 預測 X_train_k 回歸結果
        k_predict = regressor_k.predict(X_train_k)
        # 計算test 的 擬合度
        X_test_k = k_featurizer.transform(X_test)
        # 計算擬合度
        score = regressor_k.score(X_test_k, y_test)
        # test數(shù)據(jù)集的預測值
        predict = regressor_k.predict(X_test_k)
        print('%d項式r^2是%.9f' % (k , score))
        print('2018預測值:%f,2019預測值:%f ' % (predict[0], predict[1]))
        print('2018實際值:%f,2019實際值:%f ' % (y_test[0][0], y_test[1][0]))



def predict():
    for k in range(2, 10):
        # 實例化一個n次多項式特征實例
        k_featurizer = PolynomialFeatures(degree=k)
        # 用n次多項式對樣本X值做變換
        X_train_k = k_featurizer.fit_transform(X)
        # 創(chuàng)建一個線性回歸實例
        regressor_k = LinearRegression()
        # 以n次多項式變換后的X值作為輸入,帶入線性回歸模型做訓練
        regressor_k.fit(X_train_k, y)
        # 預測 X_train_k 回歸結果
        k_predict = regressor_k.predict(X_train_k)
        # 用numpy取 [2019. 2020. 2021.]
        temp = np.linspace(2019, 2021, 3)
        # 把訓練好X值的多項式特征實例應用到一系列點上, 預測 [2019. 2020. 2021.] 的結果
        temp_cubic = k_featurizer.transform(temp.reshape(temp.shape[0], 1))
        predict = regressor_k.predict(temp_cubic)
        print('2019預測值:%f,2020預測值:%f,2021年預測值:%f' % (predict[0], predict[1],predict[2]))
        # 顯示 圖表
        plt.plot(X, k_predict)


def main():
    # 通過循環(huán)的方式計算多次回歸的擬合度
    lineReg()
    # 預測
    predict()
    plt.show()


if __name__ == "__main__":
    main()

擬合度結果:

2項式r^2是0.999009072
2018預測值:2146.347619,2019預測值:2688.534857 
2018實際值:2135.000000,2019實際值:2684.000000 
3項式r^2是0.981902029
2018預測值:2164.020737,2019預測值:2727.418546 
2018實際值:2135.000000,2019實際值:2684.000000 
4項式r^2是0.981797451
2018預測值:2164.078316,2019預測值:2727.561275 
2018實際值:2135.000000,2019實際值:2684.000000 
5項式r^2是0.981711425
2018預測值:2164.123781,2019預測值:2727.679546 
2018實際值:2135.000000,2019實際值:2684.000000 
6項式r^2是0.981627012
2018預測值:2164.168360,2019預測值:2727.795265 
2018實際值:2135.000000,2019實際值:2684.000000 
7項式r^2是0.981544027
2018預測值:2164.212177,2019預測值:2727.908690 
2018實際值:2135.000000,2019實際值:2684.000000 
8項式r^2是0.981462598
2018預測值:2164.255172,2019預測值:2728.019663 
2018實際值:2135.000000,2019實際值:2684.000000 
9項式r^2是0.981382766
2018預測值:2164.297314,2019預測值:2728.128153 
2018實際值:2135.000000,2019實際值:2684.000000 

從結果總可以看到 二次多項式的擬合度高達99.9%,n次多項式的擬合度高達98.2%

2019 2020 2021 銷售額的預測值:

2019預測值:2681.617623,2020預測值:3282.276000,2021年預測值:3943.452000
2019預測值:2683.370096,2020預測值:3287.587899,2021年預測值:3954.073977
2019預測值:2683.370031,2020預測值:3287.595234,2021年預測值:3954.094960
2019預測值:2683.371401,2020預測值:3287.602068,2021年預測值:3954.111979
2019預測值:2683.372503,2020預測值:3287.607168,2021年預測值:3954.124381
2019預測值:2683.373335,2020預測值:3287.610530,2021年預測值:3954.132155
2019預測值:2683.373900,2020預測值:3287.612158,2021年預測值:3954.135298
2019預測值:2683.374207,2020預測值:3287.612072,2021年預測值:3954.133848

因為二次多項式的擬合度高達99.9%,2020年的預測值為3282.27
n次多項式的預測值為3287.61
結果怎么樣,2020拭目以待!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拗踢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伐蒋,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迁酸,死亡現(xiàn)場離奇詭異咽弦,居然都是意外死亡,警方通過查閱死者的電腦和手機胁出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門型型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人全蝶,你說我怎么就攤上這事闹蒜∷峦鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵绷落,是天一觀的道長姥闪。 經(jīng)常有香客問我,道長砌烁,這世上最難降的妖魔是什么筐喳? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮函喉,結果婚禮上避归,老公的妹妹穿的比我還像新娘。我一直安慰自己管呵,他們只是感情好梳毙,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捐下,像睡著了一般账锹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坷襟,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天奸柬,我揣著相機與錄音,去河邊找鬼婴程。 笑死鸟缕,一個胖子當著我的面吹牛,可吹牛的內容都是我干的排抬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼授段,長吁一口氣:“原來是場噩夢啊……” “哼蹲蒲!你這毒婦竟也來了?” 一聲冷哼從身側響起侵贵,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤届搁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窍育,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卡睦,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年漱抓,在試婚紗的時候發(fā)現(xiàn)自己被綠了表锻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡乞娄,死狀恐怖瞬逊,靈堂內的尸體忽然破棺而出显歧,到底是詐尸還是另有隱情,我是刑警寧澤确镊,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布士骤,位于F島的核電站,受9級特大地震影響蕾域,放射性物質發(fā)生泄漏拷肌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一旨巷、第九天 我趴在偏房一處隱蔽的房頂上張望巨缘。 院中可真熱鬧,春花似錦契沫、人聲如沸带猴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拴清。三九已至,卻和暖如春会通,著一層夾襖步出監(jiān)牢的瞬間口予,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工涕侈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沪停,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓裳涛,卻偏偏與公主長得像木张,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子端三,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355