版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第14章
scikit-learn之?dāng)?shù)據(jù)建模
14.1scikit-learn模塊功能介紹
14.2scikit-learn數(shù)據(jù)建模之線性回歸
14.3scikit-learn數(shù)據(jù)建模之logistic回歸
14.5scikit-learn數(shù)據(jù)建模之支持向量機(jī)
14.4scikit-learn數(shù)據(jù)建模之神經(jīng)網(wǎng)絡(luò)
14.6scikit-learn數(shù)據(jù)建模之?dāng)?shù)據(jù)聚類14.5scikit-learn數(shù)據(jù)建模之支持向量機(jī)
1995年,基于統(tǒng)計(jì)學(xué)習(xí)的理論基礎(chǔ)發(fā)展出了一種新的通用學(xué)習(xí)方法-支持向量機(jī)(SVM,SupportVectorMachines)。支持向量機(jī)的提出,一舉解決了第二代神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)選擇和局部最小值(過擬合、欠擬合)等問題。以統(tǒng)計(jì)學(xué)習(xí)為理論基礎(chǔ)的支持向量機(jī)被應(yīng)用于機(jī)器學(xué)習(xí)的各個(gè)領(lǐng)域,稱為最通用的萬能分類器。
支持向量機(jī)是一種二分類模型,它的基本模型是定義在特征空間上的間隔最大的線性分類器;支持向量機(jī)由于使用核技巧,使它稱為實(shí)質(zhì)上的非線性分類器。
支持向量機(jī)的學(xué)習(xí)策略是間隔最大化,它的學(xué)習(xí)算法是求解凸二次規(guī)劃的最優(yōu)化算法?,F(xiàn)已被廣泛地應(yīng)用于文本分類、圖像處理、語音識(shí)別、時(shí)間序列預(yù)測和函數(shù)估計(jì)等領(lǐng)域。14.5.1支持向量機(jī)的基本模型
定義14.5.1超平面:稱下列點(diǎn)集為超平面,其中w為系數(shù)向量,z為標(biāo)量。定義超平面的意義在于,它能將一個(gè)凸集分為兩部分:設(shè)
為兩非空集合,如果存在非零向量
及
,使得則稱超平面
分離了集合
。14.5.1支持向量機(jī)的基本模型現(xiàn)給定樣本數(shù)據(jù)集:
,學(xué)習(xí)的目標(biāo)是在特征空間中找到一個(gè)分離超平面,能將實(shí)例分到不同的類。分離超平面對(duì)應(yīng)于方程:
,它由法向量w和截距b決定,用激活函數(shù)表示為:一般來說,當(dāng)數(shù)據(jù)集T線性可分時(shí),存在無數(shù)個(gè)分離超平面,可將實(shí)例分到不同的類。我們希望求得一個(gè)最優(yōu)超平面,或間隔最大的超平面。(14.5.1)14.5.1支持向量機(jī)的基本模型一般來說,一個(gè)點(diǎn)距離分離超平面的遠(yuǎn)近可以表示為分類預(yù)測的確信程度。在超平面確定的情況下,
能夠相對(duì)地表示點(diǎn)x距離超平面的遠(yuǎn)近。樣本空間中任意點(diǎn)x到超平面
的距離可寫為:而
的符號(hào)與y的符號(hào)是否一致能夠表示分類是否正確。故可用量:來表示分類的準(zhǔn)確度。令(14.5.2)(14.5.3)14.5.1支持向量機(jī)的基本模型如圖所示,滿足(14.5.2)兩個(gè)不等式中,等號(hào)成立的那些點(diǎn),被稱為“支持向量”(supportvector),兩個(gè)異類支持向量到超平面的距離之和為:14.5.1支持向量機(jī)的基本模型這個(gè)和,我們稱之為“間隔”(margin)。我們的目標(biāo)是:找到一個(gè)劃分超平面,使其“間隔”最大,即
最小化,同時(shí)滿足(14.5.1)。于是(14.5.4)稱為支持向量機(jī)(SVM)的基本模型。(14.5.4)這是一個(gè)約束優(yōu)化問題。解決方法一般是,先構(gòu)造一個(gè)拉格朗日函數(shù),再通過對(duì)偶問題,將原約束優(yōu)化問題轉(zhuǎn)為對(duì)偶的無約束優(yōu)化問題。14.5.2支持向量機(jī)的對(duì)偶問題首先構(gòu)建拉格朗日函數(shù)。對(duì)(14.5.4)式中每一個(gè)不等式約束,引進(jìn)拉格朗日乘子
,定義拉格朗日函數(shù)為:其中
。(14.5.5)根據(jù)拉格朗日對(duì)偶性,原始問題(14.5.4)的對(duì)偶問題是極大極小問題:(14.5.6)14.5.2支持向量機(jī)的對(duì)偶問題支持向量機(jī)(SVM)的基本模型:(原始問題)原始問題的對(duì)偶問題:(14.5.5)小結(jié)一下:樣本數(shù)據(jù)集線性可分。
如何求模型中的參數(shù):?14.5.2支持向量機(jī)的對(duì)偶問題(14.5.6)(1)求為了得到對(duì)偶問題的解,需要先求拉格朗日函數(shù)對(duì)w,b的極小,再求對(duì)
的極大。將拉格朗日函數(shù)分別對(duì)w,b的求偏導(dǎo),并令其等于0,可得將上式代回到拉格朗日函數(shù)(14.5.5),得14.5.2支持向量機(jī)的對(duì)偶問題提取公因式并代入:14.5.2支持向量機(jī)的對(duì)偶問題(14.5.6)(2)求
對(duì)
的極大,即是對(duì)偶問題:(14.5.8)14.5.2支持向量機(jī)的對(duì)偶問題(14.5.6)將(14.5.8)式的目標(biāo)函數(shù)由求極大轉(zhuǎn)換成求極小,就得到與原始問題(14.5.4)等價(jià)的對(duì)偶最優(yōu)化問題:(14.5.9)14.5.2支持向量機(jī)的對(duì)偶問題
定理14.1考慮線性可分問題,設(shè)
是對(duì)偶最優(yōu)化問題(14.5.9)的最優(yōu)解,則至少存在某個(gè)下標(biāo)j,使得
,并可按下式求得原始函數(shù)最優(yōu)化問題(14.5.4)對(duì)(w,b)的最優(yōu)解:(14.5.10)由定理14.1知,分離超平面可以寫成:分類決策函數(shù)可以寫成:14.5.2支持向量機(jī)的對(duì)偶問題另外,對(duì)于任意訓(xùn)練樣本
,總有
或
。若
,則該樣本不會(huì)在分離超平面(14.5.11)的求和中出現(xiàn),也不會(huì)對(duì)分類決策函數(shù)(14.5.12)有任何影響;若
,則必有
,所對(duì)應(yīng)的樣本點(diǎn)位于最大間隔邊界上,是一個(gè)支持向量。這顯示出支持向量機(jī)的一個(gè)重要性質(zhì):訓(xùn)練完成后,大部分的訓(xùn)練樣本都不需要保留,最終模型僅與支持向量有關(guān)。綜上所述,對(duì)于給定的線性可分訓(xùn)練數(shù)據(jù)集,可以首先求對(duì)偶最優(yōu)化問題(14.5.9)的最優(yōu)解
,再利用(14.5.10)求得原始問題的解:
,從而得到分離超平面及分類決策函數(shù)。這種算法稱為線性可分支持向量機(jī)的對(duì)偶學(xué)習(xí)算法,是線性可分支持向量機(jī)學(xué)習(xí)的基本算法。14.5.2支持向量機(jī)的對(duì)偶問題如果給定的樣本數(shù)據(jù)集
線性不可分,即不滿足(14.5.4)的約束條件,此時(shí)訓(xùn)練數(shù)據(jù)中有一些奇異點(diǎn)(outlier)。為了解決這個(gè)問題,可以對(duì)每個(gè)樣本點(diǎn)
引進(jìn)一個(gè)松弛變量
,使函數(shù)間隔加上松弛變量大于等于1,這樣,約束條件變?yōu)椋和瑫r(shí),對(duì)對(duì)每個(gè)松弛變量,支付一個(gè)代價(jià)
,這樣,目標(biāo)函數(shù)變?yōu)椋哼@里,C﹥0稱為懲罰參數(shù),一般應(yīng)由問題決定,C值大時(shí)對(duì)誤分類的懲罰增大,反之減少。上式包含兩層含義:使
盡量小即間隔盡量大,同時(shí)使誤分類點(diǎn)的個(gè)數(shù)盡量小,C是調(diào)和二者的系數(shù)。14.5.3非線性支持向量機(jī)與核函數(shù)非線性分類問題是指通過利用非線性模型才能很好地進(jìn)行分類的問題。如:看下面的例子,圖14-17,左圖,是一個(gè)分類問題,紅色菱形表示正實(shí)例點(diǎn),藍(lán)色圓表示負(fù)實(shí)例點(diǎn)。由圖可見,無法用一條直線(線性模型)將正負(fù)實(shí)例點(diǎn)正確分開,但可以用一個(gè)橢圓曲線(非線性模型)將它們正確分開。通過映射,把這些點(diǎn)映射到球面上,則可找到一個(gè)平面,將這些點(diǎn)線性分開。14.5.3非線性支持向量機(jī)與核函數(shù)如果給定的樣本數(shù)據(jù)集
線性不可分,但能夠用
中的一個(gè)超曲面將正負(fù)實(shí)例正確分開,則稱這個(gè)問題為非線性可分問題。
定義14.5.1核函數(shù):設(shè)
為輸入空間,
為特征空間(希爾伯特空間),如果存在一個(gè)從
到
的映射:使得
,函數(shù)K(x,z)滿足則稱K(x,z)為核函數(shù),式中
為
和
的內(nèi)積。14.5.3非線性支持向量機(jī)與核函數(shù)
常用核函數(shù):(1)線性核:
(2)高斯核:(既可用于分類,也可用于回歸)(3)sigmoid核:(4)多項(xiàng)式核:利用核函數(shù),可以將線性分類的學(xué)習(xí)方法應(yīng)用到非線性分類問題中去。此時(shí),只需將線性支持向量機(jī)對(duì)偶形式中的內(nèi)積換成核函數(shù)即可。14.5.3非線性支持向量機(jī)與核函數(shù)下面是非線性支持向量機(jī)的一般模型:學(xué)習(xí)得到的決策函數(shù)為:
分類:
,回歸:支持向量機(jī)的最后一個(gè)問題:(14.5.9)的最優(yōu)解
如何求解呢?不難發(fā)現(xiàn),這是一個(gè)二次規(guī)劃問題。人們提出了很多高效算法,其中非常著名的是序列最小優(yōu)化算法(SequentialMinimalOptimization,SMO)。14.5.4利用sklearn.svm庫構(gòu)建支持向量機(jī)模型
SVM特別適用于小型復(fù)雜數(shù)據(jù)集,samples<100k。硬間隔分類有兩個(gè)主要的問題:1)必須要線性可分;2)對(duì)異常值特別敏感,會(huì)導(dǎo)致不能很好的泛化或找不出硬間隔。使用軟間隔分類可以解決硬間隔分類的兩個(gè)主要問題,盡可能保存街道寬敞和限制間隔違例(即位于街道之上,甚至在錯(cuò)誤一邊的實(shí)例)之間找到良好的平衡。在Sklean的SVM類中,可以通過懲罰參數(shù)C來控制這個(gè)平衡,C值越小,則街道越寬,但是違例會(huì)越多,如果SVM模型過度擬合,可以試試通過降低C來進(jìn)行正則化。
sklearn中SVM的算法庫分為兩類,一類是分類,包括SVC、
NuSVC、LinearSVC3個(gè)類。另一類是回歸,包括SVR、NuSVR、LinearSVR3個(gè)類。相關(guān)的類都包裹在sklearn.svm模塊之中。14.5.4利用sklearn.svm庫構(gòu)建支持向量機(jī)模型
分類函數(shù)SVC()參數(shù)及使用說明:
1)C:C-SVC的懲罰參數(shù),默認(rèn)值是1.0;
C越大,相當(dāng)于懲罰松弛變量,希望松弛變量接近0,即對(duì)誤分類的懲罰增大,趨向于對(duì)訓(xùn)練集全分對(duì)的情況,這樣對(duì)訓(xùn)練集測試時(shí)準(zhǔn)確率很高,但泛化能力弱。C值小,對(duì)誤分類的懲罰減小,允許容錯(cuò),將他們當(dāng)成噪聲點(diǎn),泛化能力較強(qiáng);sklearn.svm.SVC(C=1.0,kernel='rbf',degree=3,gamma='auto',coef0=0.0,shrinking=True,probability=False,tol=0.001,cache_size=200,class_weight=None,verbose=False,max_iter=-1,decision_function_shape=None,random_state=None)14.5.4利用sklearn.svm庫構(gòu)建支持向量機(jī)模型
分類函數(shù)SVC()參數(shù)及使用說明:
2)kernel:核函數(shù),默認(rèn)是rbf,可以是‘linear’(線性核),‘poly’(多項(xiàng)式),‘rbf’(高斯核),‘sigmoid’(邏輯斯蒂),‘precomputed’(預(yù)先計(jì)算的);3)degree:多項(xiàng)式poly函數(shù)的維度,默認(rèn)是3,選擇其他核函數(shù)時(shí)會(huì)被忽略;4)gamma:‘rbf’,‘poly’和‘sigmoid’的核函數(shù)參數(shù)。默認(rèn)是’auto’,則會(huì)選擇1/n_features;5)coef0:核函數(shù)的常數(shù)項(xiàng),對(duì)于‘poly’和‘sigmoid’有用;6)probability:是否采用概率估計(jì),默認(rèn)為False;7)shrinking:是否采用shrinkingheuristic方法,默認(rèn)為true;14.5.4利用sklearn.svm庫構(gòu)建支持向量機(jī)模型
分類函數(shù)SVC()參數(shù)及使用說明:8)tol:停止訓(xùn)練的誤差值大小,默認(rèn)為1e-3;9)max_iter:最大迭代次數(shù),-1為無限制;10)decision_function_shape:決策函數(shù)形狀,‘ovo’(onevone,即將類別兩兩之間進(jìn)行劃分)、‘ovr’(onevrest,即一個(gè)類別與其他類別進(jìn)行劃分)、None,默認(rèn)為default=None;11)random_state:數(shù)據(jù)清洗時(shí)的隨機(jī)種子數(shù),取int值;
主要調(diào)節(jié)的參數(shù)有:C、kernel、degree、gamma、coef0。14.5.4利用sklearn.svm庫構(gòu)建支持向量機(jī)模型
支持向量機(jī)回歸函數(shù)SVR()參數(shù)及使用說明,其中核函數(shù)rbf,稱為高斯徑向基:
1)degree:int,多項(xiàng)式核函數(shù)的次數(shù)('poly'),默認(rèn)=3,其他內(nèi)核忽略;
3)tol
:
float,默認(rèn)值=1e-3,容忍停止標(biāo)準(zhǔn);sklearn.svm.SVR(kernel='rbf',degree=3,gamma='auto',
coef0=0.0,tol=0.001,C=1.0,epsilon=0.1,shrinking=True,
cache_size=200,verbose=False,max_iter=-1)
2)coef0
:
float,默認(rèn)值0.0,核函數(shù)中的獨(dú)立項(xiàng)。它在'poly'和'sigmoid'中重要;
4)cache_size
:
float,指定內(nèi)核緩存的大?。ㄒ訫B為單位);5)max_iter
:
int,求解器內(nèi)迭代的最大迭代次數(shù),默認(rèn)值為-1表示無限制;14.5.4利用sklearn.svm庫構(gòu)建支持向量機(jī)模型
屬性:1)support_:(array-like,shape=[n_SV])Indicesofsupportvectors;2)support_vectors_:(array-like,shape=[nSV,n_features])Supportvectors;3)dual_coef_:(array,shape=[1,n_SV])Coefficientsofthesupportvectorinthedecisionfunction;4)coef_:(array,shape=[1,n_features])Weightsassignedtothefeatures(coefficientsintheprimalproblem).Thisisonlyavailableinthecaseofalinearkernel.
coef_
isreadonlypropertyderivedfrom
dual_coef_
and
support_vectors_;5)intercept_:(array,shape=[1])Constantsindecisionfunction。
方法
:fit(X,y)
、predict(X)
、score(X,y)。14.5.4利用sklearn.svm庫構(gòu)建支持向量機(jī)模型例14-12用SVC對(duì)“鳶尾花數(shù)據(jù)集”多分類建模:建模思路:SVC對(duì)小樣本的非線性多分類問題,建模結(jié)果比較理想,訓(xùn)練參數(shù)選擇主要有:懲罰參數(shù)C、核函數(shù)kernel、核函數(shù)中的參數(shù)gamma、決策函數(shù)decision_function_shape。說明:在“鳶尾花數(shù)據(jù)集”150個(gè)數(shù)據(jù)中,第0類的50個(gè)數(shù)據(jù)與后100個(gè)數(shù)據(jù)是線性可分的,第1類的50個(gè)數(shù)據(jù)與第2類的50個(gè)數(shù)據(jù),是非線性可分的。因此,該數(shù)據(jù)集是衡量一個(gè)分類算法優(yōu)劣的尺子。
例14-12用SVC對(duì)“鳶尾花數(shù)據(jù)集”多分類建模1234567891011121314importnumpyasnp;importmatplotlib.pyplotaspltfromsklearnimportdatasets,metricsfromsklearn.svmimportSVC#支持向量機(jī)多分類fromsklearn.model_selectionimporttrain_test_splitiris=datasets.load_iris()x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=0)p=[];c=np.arange(0.01,0.2,0.005)#懲罰參數(shù)
foriinnp.arange(len(c)):#對(duì)不同的懲罰參數(shù)進(jìn)行迭代,觀察對(duì)應(yīng)的預(yù)測正確率#svc=SVC(C=c[i],kernel='linear',decision_function_shape='ovr')svc=SVC(C=c[i],kernel='rbf',gamma='auto',decision_function_shape='ovr')#分類決策:'ovr'svc.fit(x_train,y_train)#模型訓(xùn)練y_fit=svc.predict(x_test)#預(yù)測數(shù)據(jù)a_score=metrics.accuracy_score(y_test,y_fit)#預(yù)測正確率p.append(a_score)
例14-12用SVC對(duì)“鳶尾花數(shù)據(jù)集”多分類建模15161718192021plt.rcParams['font.sans-serif']='SimHei'#消除中文亂碼plt.title('基于SVC的鳶尾花數(shù)據(jù)集多分類',fontsize=13)plt.xlabel('懲罰參數(shù)C');plt.ylabel('預(yù)測正確率')plt.plot(c,p);plt.show()d=svc.decision_function(x_test)#根據(jù)測試數(shù)據(jù),計(jì)算對(duì)應(yīng)的決策數(shù)組foriinrange(len(d)):#決策數(shù)組中,分量最大的維數(shù)為分類標(biāo)簽
print('決策向量函數(shù):',d[i],'預(yù)測輸出:',y_fit[i],'目標(biāo)輸出',y_test[i])調(diào)試時(shí),kernel='linear'時(shí),為線性核,C越大分類效果越好,但有可能會(huì)過擬合(defaulC=1);kernel='rbf'時(shí),為高斯核,gamma值越小,分類界面越連續(xù);gamma值越大,分類界面越“散”,分類效果越好,但有可能會(huì)過擬合。決策向量函數(shù):[-0.212651031.013261122.2108132]預(yù)測輸出:2
,
目標(biāo)輸出
2決策向量函數(shù):[-0.208201622.227393770.89149869]預(yù)測輸出:1
,
目標(biāo)輸出
1……
例14-12用SVC對(duì)“鳶尾花數(shù)據(jù)集”多分類建模從圖可以看出,當(dāng)懲罰參數(shù)C=0.135時(shí),預(yù)測正確率:100%。14.5.5利用SVR進(jìn)行回歸預(yù)測:過擬合與股票預(yù)測有多種方法,可以對(duì)時(shí)間序列數(shù)據(jù)(如:人口增長數(shù)、國家GDP數(shù)、股票綜合指數(shù)等)進(jìn)行回歸預(yù)測。支持向量機(jī)(SVM)是其中之一,它適用于小樣本數(shù)據(jù)。SVM可以將輸入向量X非線性映射到高維特征空間上,然后進(jìn)行線性回歸擬合,其核函數(shù)一般為高斯徑向基函數(shù),但里面的gamma(伽馬參數(shù))若取值太?。?.001),會(huì)造成欠擬合(即:訓(xùn)練擬合較差),而gamma若取值太大(0.9),又會(huì)造成過擬合(即:訓(xùn)練數(shù)據(jù)擬合非常好,但對(duì)未訓(xùn)練數(shù)據(jù)的擬合非常差)。高斯核:(既可用于分類,也可用于回歸)gamma(伽馬參數(shù))14.5.5利用SVR進(jìn)行回歸預(yù)測:過擬合與股票預(yù)測例14-13文件“歷年總?cè)丝?、新生人口和死亡人?csv”收集了我國部分地區(qū)1949-2019年的出生人口數(shù)、死亡人口數(shù),數(shù)據(jù)來自“中國統(tǒng)計(jì)局”官網(wǎng)(具體數(shù)據(jù)見本章附件)。從2016年開始,出生人口數(shù)不斷下降,而死亡人口數(shù)不斷上升,按照目前的人口政策及社會(huì)的發(fā)展情況,有權(quán)威機(jī)構(gòu)利用多種模型及方法,預(yù)測:再過八年左右,我國人口總數(shù)將達(dá)到峰值。下面簡單用SVM模型,對(duì)人口出生數(shù)、死亡數(shù)進(jìn)行回歸建模。年份總?cè)丝冢ㄈf)出生人口(萬)死亡人口(萬)凈增人口(萬)1949541671950108386719505519620429941048……………20161382711786977809201713900817239867372018139538152399353020191400051465998467
例14-13用SVM模型,對(duì)人口出生數(shù)、死亡數(shù)進(jìn)行回歸建模。建模思路:輸入自變量x=0,1,…,67,因變量y分別用前68年(1949-2016)的出生人口數(shù)、死亡人口數(shù)進(jìn)行SVR訓(xùn)練;然后根據(jù)已經(jīng)訓(xùn)練好的模型參數(shù),用自變量x=0,1,…,69,70進(jìn)行輸入測試,測試輸出的人口數(shù)據(jù),前68個(gè)數(shù)據(jù)為擬合,后3個(gè)數(shù)據(jù)為預(yù)測。訓(xùn)練過程中,設(shè)置核函數(shù)的伽馬參數(shù)的不同取值,觀察擬合情況。圖14-19(a)人口數(shù)擬合及預(yù)測(gamma=0.001)
圖14-19(b)人口數(shù)擬合及預(yù)測(gamma=0.9)預(yù)測人口數(shù)(欠擬合)過擬合:擬合好,預(yù)測差最后3年的人口數(shù)據(jù)沒有參與訓(xùn)練。例14-13用SVM模型,對(duì)人口出生數(shù)、死亡數(shù)進(jìn)行回歸建模。123456789101112importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltImportimageio#引入庫,用于保存幀圖像fromsklearn.svmimportSVRdf=pd.read_csv(‘d:\\歷年總?cè)丝?、新生人口和死亡人?csv',encoding='gbk')year=np.array(df.iloc[0:72,0])#年份(1949-2019):獲取df第0-71行、第0列的數(shù)據(jù),返回一維數(shù)組y_data=np.array(df.iloc[0:72,2])#歷年(1949-2019)出生人口數(shù):獲取df第0到71行、第2列的數(shù)據(jù)z_data=np.array(df.iloc[0:72,3])#歷年(1949-2019)死亡人口數(shù):獲取df第0到71行、第3列的數(shù)據(jù)y_train=y_data[0:68]#出生訓(xùn)練數(shù)據(jù):取前68年(1949-2016)的出生人口數(shù),用于訓(xùn)練z_train=z_data[0:68]#死亡訓(xùn)練數(shù)據(jù):取前68年(1949-2016)的死亡人口數(shù),用于訓(xùn)練x_train=np.array(range(len(y_train)))#自變量訓(xùn)練數(shù)據(jù):出生人口數(shù)下標(biāo)為時(shí)間序列0,1,2,3,...例14-13用SVM模型,對(duì)人口出生數(shù)、死亡數(shù)進(jìn)行回歸建模。1314151617181920212223x_train=np.reshape(x_train,(-1,1))y_train=np.reshape(y_train,(-1,1))#將一維數(shù)組y_train變?yōu)槎S數(shù)組:歷年出生人口數(shù)z_train=np.reshape(z_train,(-1,1))#將一維數(shù)組z_train變?yōu)槎S數(shù)組:歷年出死亡口數(shù)x_test=np.array(range(len(y_data)))#將整個(gè)數(shù)據(jù)用于測試擬合x_test=np.reshape(x_test,(-1,1))f=plt.figure(figsize=(10,6),dpi=80)plt.rcParams['font.sans-serif']=['SimHei']#繪圖時(shí)可以顯示中文f.set_facecolor((0.92,0.92,0.96))#設(shè)置坐標(biāo)軸顏色g=np.linspace(0.001,0.99,30)#從0.001到0.99,分30等份image_list=[]plt.ion()核函數(shù)的gamma(伽馬參數(shù))取不同值,觀察擬合情況例14-13用SVM模型,對(duì)人口出生數(shù)、死亡數(shù)進(jìn)行回歸建模。24252627282930313233343536373839foriinrange(len(g)):#對(duì)核函數(shù)的伽馬參數(shù)gamma的不同取值進(jìn)行迭代
svr=SVR(C=1e3,kernel='rbf',gamma=g[i])#懲罰參數(shù):C=1e3,核函數(shù):kernel='rbf
svr.fit(x_train,y_train)#用出生人口數(shù)y_train模型訓(xùn)練
y_fit=svr.predict(x_test)#后面3年的出生人口數(shù)據(jù)沒有用于訓(xùn)練,輸出的為預(yù)測擬合
plt.cla()#清除原有圖像
plt.title('核函數(shù)的參數(shù)伽馬:'+str(g[i]),fontsize=22)plt.plot(x_test,y_data,color='b',marker='+')#實(shí)際歷年出生人口數(shù)折線圖
plt.plot(x_test,y_fit,color='r',linestyle=':',marker='o')#擬合歷年出生人口數(shù),后3年的數(shù)據(jù)為預(yù)測
svr.fit(x_train,z_train)#用死亡人口數(shù)z_train模型訓(xùn)練
z_fit=svr.predict(x_test)#后面3年的死亡人口數(shù)據(jù)沒有用于訓(xùn)練,輸出的為預(yù)測擬合
plt.plot(x_test,z_data,color='b',marker='+')#實(shí)際歷年死亡人口數(shù)折線圖
plt.plot(x_test,z_fit,color='g',linestyle=':',marker='o')#擬合歷年死亡人口數(shù),后3年的數(shù)據(jù)為預(yù)測
plt.xticks(range(0,len(year),5),year[0::5],rotation=45,fontsize=15)plt.legend(['實(shí)際出生人口數(shù)','預(yù)測出生人口數(shù)','實(shí)際死亡人口數(shù)','預(yù)測死亡人口數(shù)'],fontsize=12)plt.savefig('temp.png');plt.pause(1)#暫停0.2秒
image_list.append(imageio.imread('temp.png'))例14-13用SVM模型,對(duì)人口出生數(shù)、死亡數(shù)進(jìn)行回歸建模。4041plt.ioff()#關(guān)閉交互模式imageio.mimsave('d:\\SVR.gif',image_list,duration=1)#保存幀圖像14.5.5利用SVR進(jìn)行回歸預(yù)測:過擬合與股票預(yù)測例14-14文件《A股滬市綜合指數(shù)(20200101-20201224).csv》收集了我國A股滬市綜合指數(shù)的收盤指數(shù)、每日漲幅(具體數(shù)據(jù)見本章附件)。用SVM模型,對(duì)滬市收盤指數(shù)進(jìn)行回歸建模。交易日期收盤指數(shù)擬合預(yù)測202001023085.23085.1202001033083.793083.7
202001063083.413083.3………202005072871.522871.6
202005082895.342895.2202005112894.82907.5202005122891.562907.1202005132898.052906.9
建模思路:先取前82天的收盤指數(shù)數(shù)據(jù)y,對(duì)應(yīng)自變量輸入x=0,1,…,82,進(jìn)行SVR訓(xùn)練;然后根據(jù)已經(jīng)訓(xùn)練好的模型參數(shù),用自變量x=0,1,…,84,85進(jìn)行輸入測試,測試輸出的收盤指數(shù),前82個(gè)數(shù)據(jù)為擬合,后3個(gè)數(shù)據(jù)(沒有參與訓(xùn)練)為預(yù)測。擬合預(yù)測例14-14用SVM模型,對(duì)滬市收盤指數(shù)進(jìn)行回歸建模。123456789101112importpandasaspd;importnumpyasnpimportmatplotlib.pyplotasplt;fromsklearn.svmimportSVRfromsklearnimportmetricsdf=pd.read_csv('d:\\A股滬市綜合指數(shù)(20200101-20201224).csv',encoding='gbk')#---(1)加載數(shù)據(jù)d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年個(gè)人租房貸款合同范本:租房金融支持3篇
- 2025年度二零二五版人力資源外包代理招聘與績效評(píng)估合同3篇
- 2025年度廠房建設(shè)與運(yùn)營維護(hù)一體化合同3篇
- 二零二五年度考研政治理論強(qiáng)化訓(xùn)練輔導(dǎo)合同
- 二零二五年度股東間風(fēng)險(xiǎn)共擔(dān)合作合同
- 二零二五年度退休人員教育機(jī)構(gòu)兼職授課合同范本
- 2025年度酒吧租賃合同樣本:酒吧與咖啡館合作租賃合同
- 二零二五年度競業(yè)限制合同在員工離職后的法律保護(hù)
- 2025年度企業(yè)數(shù)據(jù)分析師顧問聘請(qǐng)合同
- 2025年度租賃合同提前解除及租賃雙方續(xù)租協(xié)議
- 施工現(xiàn)場水電費(fèi)協(xié)議
- SH/T 3046-2024 石油化工立式圓筒形鋼制焊接儲(chǔ)罐設(shè)計(jì)規(guī)范(正式版)
- 2024年??谑羞x調(diào)生考試(行政職業(yè)能力測驗(yàn))綜合能力測試題及答案1套
- 六年級(jí)數(shù)學(xué)質(zhì)量分析及改進(jìn)措施
- 一年級(jí)下冊(cè)數(shù)學(xué)口算題卡打印
- 真人cs基于信號(hào)發(fā)射的激光武器設(shè)計(jì)
- 【閱讀提升】部編版語文五年級(jí)下冊(cè)第三單元閱讀要素解析 類文閱讀課外閱讀過關(guān)(含答案)
- 四年級(jí)上冊(cè)遞等式計(jì)算練習(xí)200題及答案
- 法院后勤部門述職報(bào)告
- 2024年國信證券招聘筆試參考題庫附帶答案詳解
- 道醫(yī)館可行性報(bào)告
評(píng)論
0/150
提交評(píng)論