2021-01-27 分類(lèi): 網(wǎng)站建設(shè)
評(píng)價(jià)一個(gè)算法的好壞,我認(rèn)為關(guān)鍵是看能不能解決問(wèn)題。如果算法能很好地解決實(shí)際的問(wèn)題,那么我認(rèn)為就是好算法。 比如預(yù)測(cè)的算法,關(guān)鍵是看預(yù)測(cè)的準(zhǔn)確率,即預(yù)測(cè)值與實(shí)際值之間的接近程度,而不是看算法本身的評(píng)分高低。
在《 如何用人工智能預(yù)測(cè)雙 11 的交易額 》這篇文章中,利用線性回歸算法,我預(yù)測(cè) 2019 年雙 11 交易額為 2471 億元,而阿里官方公布的實(shí)際交易額是 2684 億元,預(yù)測(cè)值比實(shí)際值少 7.9%,對(duì)這個(gè)結(jié)果,我覺(jué)得準(zhǔn)確率不夠高。反思預(yù)測(cè)的過(guò)程,我認(rèn)為可以從以下幾個(gè)方面來(lái)進(jìn)行改進(jìn)。
1. 樣本
為了簡(jiǎn)化算法模型,我舍棄掉了前幾年相對(duì)較小的數(shù)據(jù),只保留了最近 5 年的數(shù)據(jù)。
在數(shù)據(jù)量本身就比較少的情況下,我仍然遵循簡(jiǎn)單原則,這無(wú)形中就加大了算法不穩(wěn)定的風(fēng)險(xiǎn),出現(xiàn)了欠擬合的問(wèn)題。
盡管算法的評(píng)分很高,但是評(píng)分高并不代表算法就好。所以,樣本的選擇非常重要,不能單純地追求算法的評(píng)分高,而忽略樣本的質(zhì)量。
2. 算法
如果保留所有樣本,那么顯然數(shù)據(jù)呈現(xiàn)的規(guī)律并不是線性的,用多項(xiàng)式回歸算法應(yīng)該是個(gè)更好的選擇。
假如用三次多項(xiàng)式回歸算法進(jìn)行預(yù)測(cè),那么算法代碼如下:
- # 導(dǎo)入所需的庫(kù)
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- from sklearn.linear_model import LinearRegression
- from sklearn.preprocessing import PolynomialFeatures
- from sklearn.pipeline import Pipeline
- from sklearn.preprocessing import StandardScaler
- # 內(nèi)嵌畫(huà)圖
- %matplotlib inline
- # 設(shè)置正常顯示中文標(biāo)簽
- plt.rcParams['font.sans-serif'] = ['SimHei']
- # 讀取數(shù)據(jù),在林驥的公眾號(hào)后臺(tái)回復(fù)「1111」
- df = pd.read_excel('./data/1111.xlsx')
- # x 年份
- x = np.array(df.iloc[:, 0]).reshape(-1, 1)
- # y 交易額
- y = np.array(df.iloc[:, 1])
- # z 預(yù)測(cè)的年份
- z = [[2019]]
- # 用管道的方式調(diào)用多項(xiàng)式回歸算法
- poly_reg = Pipeline([
- ('ploy', PolynomialFeatures(degree=3)),
- ('std_scaler', StandardScaler()),
- ('lin_reg', LinearRegression())
- ])
- poly_reg.fit(x, y)
- # 用算法進(jìn)行預(yù)測(cè)
- predict = poly_reg.predict(z)
- # 輸出預(yù)測(cè)結(jié)果
- print('預(yù)測(cè) 2019 年雙 11 的交易額是', str(round(predict[0],0)), '億元。')
- print('線性回歸算法的評(píng)分:', poly_reg.score(x, y))
預(yù)測(cè) 2019 年雙 11 的交易額是 2689.0 億元。
線性回歸算法的評(píng)分:0.99939752363314
下面是用 matplotlib 畫(huà)圖的代碼:
- # 將數(shù)據(jù)可視化,設(shè)置圖像大小
- fig = plt.figure(figsize=(10, 8))
- ax = fig.add_subplot(111)
- # 繪制散點(diǎn)圖
- ax.scatter(x, y, color='#0085c3', s=100)
- ax.scatter(z, predict, color='#dc5034', marker='*', s=260)
- # 設(shè)置標(biāo)簽等
- plt.xlabel('年份', fontsize=20)
- plt.ylabel('雙 11 交易額', fontsize=20)
- plt.tick_params(labelsize=20)
- # 繪制預(yù)測(cè)的直線
- x2 = np.concatenate([x, z])
- y2 = poly_reg.predict(x2)
- plt.plot(x2, y2, '-', c='#7ab800')
- plt.title('用多項(xiàng)式回歸預(yù)測(cè)雙 11 的交易額', fontsize=26)
- plt.show()
這近乎好地?cái)M合了 2009 年以來(lái)十一年的數(shù)據(jù),因此不禁讓人懷疑,阿里的數(shù)據(jù)是不是過(guò)于好?
3. 優(yōu)化
按照一般的機(jī)器學(xué)習(xí)算法流程,應(yīng)該把數(shù)據(jù)拆分為兩部分,分別稱為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集。從 2009 年到 2018 年,雙 11 的交易額總共才 10 個(gè)數(shù)據(jù),我在預(yù)測(cè)的時(shí)候還舍棄了前 5 個(gè)數(shù)據(jù),最后只剩下 5 個(gè)數(shù)據(jù),我以為再拆分就沒(méi)有必要了。 但機(jī)器學(xué)習(xí)算法的表現(xiàn)好壞,有一個(gè)關(guān)鍵因素,就是要有足夠多的數(shù)據(jù)量。
另外,應(yīng)該適當(dāng)?shù)厥褂镁W(wǎng)格搜索法,優(yōu)化算法的參數(shù),必要時(shí)還要與交叉驗(yàn)證法相結(jié)合,進(jìn)行算法評(píng)估,從而提高算法的可信度和準(zhǔn)確率。 除了算法的準(zhǔn)確率,還可以使用其他的方法對(duì)模型進(jìn)行評(píng)價(jià),比如:召回率、F1 分?jǐn)?shù)、ROC、AUC、MSE、RMSE、MAE 等等 。
現(xiàn)實(shí)世界是錯(cuò)綜復(fù)雜的,很難用一個(gè)算法就解決問(wèn)題,往往需要經(jīng)過(guò)很多次的嘗試,才可能找到基本符合的模型。需要注意的是,多項(xiàng)式回歸的指數(shù)不宜過(guò)高,否則算法太復(fù)雜,很可能出現(xiàn)“過(guò)擬合”的現(xiàn)象,從而泛化能力比較差,也就是說(shuō),對(duì)于訓(xùn)練數(shù)據(jù)集能夠很好地?cái)M合,但是對(duì)于測(cè)試數(shù)據(jù)集的預(yù)測(cè)誤差比較大。模型復(fù)雜度與預(yù)測(cè)誤差的大致關(guān)系如下圖所示:
小結(jié)
本文是我在用線性回歸算法預(yù)測(cè)雙 11 的交易額之后,做的一次復(fù)盤(pán),總結(jié)了改進(jìn)的思路,學(xué)習(xí)優(yōu)化的方法。
學(xué)以致用,是我學(xué)習(xí)的基本原則。如果害怕出錯(cuò),不去勇于實(shí)踐,學(xué)習(xí)再多算法有什么用?這就如同我們不能指望不下水就學(xué)會(huì)游泳一樣。
當(dāng)前題目:如何評(píng)價(jià)算法的好壞?
鏈接分享:http://aaarwkj.com/news/97618.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、電子商務(wù)、網(wǎng)站策劃、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容