色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RFE遞歸特征消除特征排序

Linux愛好者 ? 來源:數據STUDIO ? 作者:云朵君 ? 2022-03-16 17:26 ? 次閱讀

本文主要從股市數據變量的特征分布及特征重要性兩個角度對數據進行分析。通過繪制圖表等方法分析特征本身對分布狀況或特征間相互關系。通過機器學習模型方法分析出特種重要性排序,選出對結果貢獻較大對那幾個特征,這對后面建模對模型效果有著不可小覷對效果。

數據準備

df.info()

	
		 DatetimeIndex: 1260 entries, 2015-12-31 to 2020-12-31 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Open 1260 non-null float64 1 High 1260 non-null float64 2 Low 1260 non-null float64 3 Close 1260 non-null float64 4 Adj Close 1260 non-null float64 5 Volume 1260 non-null int64 dtypes: float64(5), int64(1) memory usage: 68.9 KB

特征構造


	
		df['H-L']=df['High']-df['Low'] df['O-C']=df['AdjClose']-df['Open'] df['3dayMA']=df['AdjClose'].shift(1).rolling(window=3).mean() df['10dayMA']=df['AdjClose'].shift(1).rolling(window=10).mean() df['30dayMA']=df['AdjClose'].shift(1).rolling(window=30).mean() df['Std_dev']=df['AdjClose'].rolling(5).std() df.dtypes

描述性統計


	
		df.describe().Ta162b70c-a482-11ec-952b-dac502259ad0.png

缺失值分析

檢查缺失值


	
		df.isnull().sum()

	
		Open 0 High 0 Low 0 Close 0 Adj Close 0 Volume 0 H-L 0 O-C 0 3day MA 3 10day MA 10 30day MA 30 Std_dev 4 dtype: int64

缺失值可視化

這里使用Series的屬性plot直接繪制條形圖。

	
		df_missing_count=df.isnull().sum() #-1表示缺失數據 #另一個不常見的設置畫布的方法 plt.rcParams['figure.figsize']=(15,8) df_missing_count.plot.bar() plt.show()a177796c-a482-11ec-952b-dac502259ad0.png

	forcolumnindf: print("columnnuniqueNaN") print("{0:15}{1:6d}{2:6}".format( column,df[column].nunique(), (df[column]==-1).sum()))

	
		column nunique NaN Open 1082 0 High 1083 0 Low 1025 0 Close 1098 0 Adj Close 1173 0 Volume 1250 0 H-L 357 0 O-C 1237 2 3day MA 1240 0 10day MA 1244 0 30day MA 1230 0 Std_dev 1252 0

特征間相關性分析


	importseabornassns #一個設置色板的方法 #cmap=sns.diverging_palette(220,10, as_cmap=True) sns.heatmap(df.iloc[:df.shape[0]].corr() ,annot=True,cmap='Blues')a185bc48-a482-11ec-952b-dac502259ad0.png

特征值分布

直方圖


	
		columns_multi=[xforxinlist(df.columns)] df.hist(layout=(3,4),column=columns_multi) #一種不常用的調整畫布大小的方法 fig=plt.gcf() fig.set_size_inches(20,9)a19aedb6-a482-11ec-952b-dac502259ad0.png

密度圖


	
		names=columns_multi df.plot(kind='density',subplots=True, layout=(3,4),sharex=False)a1aee26c-a482-11ec-952b-dac502259ad0.png

特征間的關系

函數可視化探索數據特征間的關系

	
		sns.pairplot(df,size=3, diag_kind="kde")a1d3695c-a482-11ec-952b-dac502259ad0.png

特征重要性

通過多種方式對特征重要性進行評估,將每個特征的特征重要的得分取均值,最后以均值大小排序繪制特征重要性排序圖,直觀查看特征重要性。

導入相關模塊


	fromsklearn.feature_selectionimportRFE,RFECV,f_regression fromsklearn.linear_modelimport(LinearRegression,Ridge,Lasso,LarsCV) fromstability_selectionimportStabilitySelection,RandomizedLasso fromsklearn.preprocessingimportMinMaxScaler fromsklearn.ensembleimportRandomForestRegressor fromsklearn.ensembleimportRandomForestClassifier fromsklearn.svmimportSVR

線性回歸系數大小排序

回歸系數(regression coefficient)在回歸方程中表示自變量對因變量影響大小的參數。回歸系數越大表示對影響越大。

創建排序函數


	
		df=df.dropna() Y=df['AdjClose'].values X=df.values colnames=df.columns #定義字典來存儲的排名 ranks={} #創建函數,它將特征排名存儲到rank字典中 defranking(ranks,names,order=1): minmax=MinMaxScaler() ranks=minmax.fit_transform( order*np.array([ranks]).T).T[0] ranks=map(lambdax:round(x,2),ranks) res=dict(zip(names,ranks)) returnres

多個回歸模型系數排序


	#使用線性回歸 lr=LinearRegression(normalize=True) lr.fit(X,Y) ranks["LinReg"]=ranking(np.abs(lr.coef_),colnames) #使用Ridge ridge=Ridge(alpha=7) ridge.fit(X,Y) ranks['Ridge']=ranking(np.abs(ridge.coef_),colnames) #使用Lasso lasso=Lasso(alpha=.05) lasso.fit(X,Y) ranks["Lasso"]=ranking(np.abs(lasso.coef_),colnames)

隨機森林特征重要性排序

隨機森林得到的特征重要性的原理是我們平時用的較頻繁的一種方法,無論是對分類型任務還是連續型任務,都有較好對效果。在隨機森林中某個特征X的重要性的計算方法如下:
  1. 對于隨機森林中的每一顆決策樹, 使用相應的OOB(袋外數據)數據來計算它的袋外數據誤差 ,記為.
  2. 隨機地對袋外數據OOB所有樣本的特征X加入噪聲干擾 (就可以隨機的改變樣本在特征X處的值), 再次計算它的袋外數據誤差 ,記為.
  3. 假設隨機森林中有棵樹,那么對于特征X的重要性,之所以可以用這個表達式來作為相應特征的重要性的度量值是因為:若給某個特征隨機加入噪聲之后,袋外的準確率大幅度降低,則說明這個特征對于樣本的分類結果影響很大,也就是說它的重要程度比較高。

連續型特征重要性

對于連續型任務的特征重要性,可以使用回歸模型RandomForestRegressorfeature_importances_屬性。

	
		X_1=dataset[['Open','High','Low','Volume', 'Increase_Decrease','Buy_Sell_on_Open', 'Buy_Sell','Returns']] y_1=dataset['AdjClose'] #創建決策樹分類器對象 clf=RandomForestRegressor(random_state=0,n_jobs=-1) #訓練模型 model=clf.fit(X_1,y_1) #計算特征重要性 importances=model.feature_importances_ #按降序排序特性的重要性 indices=np.argsort(importances)[::-1] #重新排列特性名稱,使它們與已排序的特性重要性相匹配 names=[dataset.columns[i]foriinindices] #創建畫布 plt.figure(figsize=(10,6)) #添加標題 plt.title("FeatureImportance") #添加柱狀圖 plt.bar(range(X.shape[1]),importances[indices]) #為x軸添加特征名 plt.xticks(range(X.shape[1]),names,rotation=90)a1efefd2-a482-11ec-952b-dac502259ad0.png

分類型特征重要性

當該任務是分類型,需要用分類型模型時,可以使用RandomForestClassifier中的feature_importances_屬性。

	
		X2=dataset[['Open','High','Low','AdjClose', 'Volume','Buy_Sell_on_Open', 'Buy_Sell','Returns']] y2=dataset['Increase_Decrease'] clf=RandomForestClassifier(random_state=0,n_jobs=-1) model=clf.fit(X2,y2) importances=model.feature_importances_ indices=np.argsort(importances)[::-1] names=[dataset.columns[i]foriinindices] plt.figure(figsize=(10,6)) plt.title("FeatureImportance") plt.bar(range(X2.shape[1]),importances[indices]) plt.xticks(range(X2.shape[1]),names,rotation=90) plt.show()a20230de-a482-11ec-952b-dac502259ad0.png

本案例中使用回歸模型


	
		rf=RandomForestRegressor(n_jobs=-1,n_estimators=50,verbose=3) rf.fit(X,Y) ranks["RF"]=ranking(rf.feature_importances_,colnames);
		下面介紹兩個頂層特征選擇算法,之所以叫做頂層,是因為他們都是建立在基于模型的特征選擇方法基礎之上的,例如回歸和SVM,在不同的子集上建立模型,然后匯總最終確定特征得分。

RandomizedLasso

RandomizedLasso的選擇穩定性方法排序。 穩定性選擇是一種基于二次抽樣和選擇算法相結合較新的方法,選擇算法可以是回歸、SVM或其他類似的方法。它的主要思想是在不同的數據子集和特征子集上運行特征選擇算法,不斷的重復,最終匯總特征選擇結果,比如可以統計某個特征被認為是重要特征的頻率(被選為重要特征的次數除以它所在的子集被測試的次數)。 理想情況下,重要特征的得分會接近100%。稍微弱一點的特征得分會是非0的數,而最無用的特征得分將會接近于0。

	
		lambda_grid=np.linspace(0.001,0.5,num=100) rlasso=RandomizedLasso(alpha=0.04) selector=StabilitySelection(base_estimator=rlasso,lambda_name='alpha', lambda_grid=lambda_grid,threshold=0.9,verbose=1) selector.fit(X,Y) #運行隨機Lasso的選擇穩定性方法 ranks["rlasso/Stability"]=ranking(np.abs(selector.stability_scores_.max(axis=1)),colnames) print('finished')

	
		{'Open': 1.0, 'High': 1.0, 'Low': 0.76, 'Close': 1.0, 'Adj Close': 0.99, 'Volume': 0.0, 'H-L': 0.0, 'O-C': 1.0, '3day MA': 1.0, '10day MA': 0.27, '30day MA': 0.75, 'Std_dev': 0.0} finished

穩定性得分可視化


	
		fig,ax=plot_stability_path(selector) fig.set_size_inches(15,6) fig.show()a218fab2-a482-11ec-952b-dac502259ad0.png

查看得分超過閾值的變量索引及其得分


	#獲取所選特征的掩碼或整數索引 selected_variables=selector.get_support(indices=True) selected_scores=selector.stability_scores_.max(axis=1) print('Selectedvariablesare:') print('-----------------------') foridx,(variable,score)inenumerate( zip(selected_variables, selected_scores[selected_variables])): print('Variable%d:[%d], score%.3f'%(idx+1,variable,score))

	
		Selected variables are: ----------------------- Variable 1: [0], score 1.000 Variable 2: [1], score 1.000 Variable 3: [3], score 1.000 Variable 4: [4], score 0.990 Variable 5: [7], score 1.000 Variable 6: [8], score 1.000

RFE遞歸特征消除特征排序

基于遞歸特征消除的特征排序。 給定一個給特征賦權的外部評估器(如線性模型的系數),遞歸特征消除(RFE)的目標是通過遞歸地考慮越來越小的特征集來選擇特征。 主要思想是反復的構建模型(如SVM或者回歸模型)然后選出最好的(或者最差的)的特征(可以根據系數來選)。
  1. 首先,在初始特征集上訓練評估器,并通過任何特定屬性或可調用屬性來獲得每個特征的重要性。
  2. 然后,從當前的特征集合中剔除最不重要的特征。
  3. 這個過程在訓練集上遞歸地重復,直到最終達到需要選擇的特征數。
這個過程中特征被消除的次序就是特征的排序。因此,這是一種尋找最優特征子集的貪心算法。 RFE的穩定性很大程度上取決于在迭代的時候底層用哪種模型。例如,假如RFE采用的普通的回歸,沒有經過正則化的回歸是不穩定的,那么RFE就是不穩定的;假如采用的是Ridge,而用Ridge正則化的回歸是穩定的,那么RFE就是穩定的。

	
		sklearn.feature_selection.RFE(estimator, *,n_features_to_select=None, step=1,verbose=0, importance_getter='auto')
estimatorEstimator instance 一種帶有""擬合""方法的監督學評估器,它提供關于特征重要性的信息(例如"coef_"、"feature_importances_")。n_features_to_selectint or float, default=None 要選擇的功能的數量。如果'None',則選擇一半的特性。如果為整數,則該參數為要選擇的特征的絕對數量。如果浮點數在0和1之間,則表示要選擇的特征的分數。stepint or float, default=1 如果大于或等于1,那么'step'對應于每次迭代要刪除的(整數)特征數。如果在(0.0,1.0)范圍內,則'step'對應于每次迭代中要刪除的特性的百分比(向下舍入)。verboseint, default=0 控制輸出的冗長。importance_getterstr or callable, default='auto' 如果是'auto',則通過估計器的'coef_'或'feature_importances_'屬性使用特征重要性。

	
		lr=LinearRegression(normalize=True) lr.fit(X,Y) #當且僅當剩下最后一個特性時停止搜索 rfe=RFE(lr,n_features_to_select=1,verbose=3) rfe.fit(X,Y) ranks["RFE"]=ranking(list(map(float,rfe.ranking_)), colnames,order=-1)

	
		Fitting estimator with 12 features. ... Fitting estimator with 2 features.

RFECV

遞歸特征消除交叉驗證。 Sklearn提供了RFE包,可以用于特征消除,還提供了RFECV,可以通過交叉驗證來對的特征進行排序。

	#實例化估計器和特征選擇器 svr_mod=SVR(kernel="linear") rfecv=RFECV(svr_mod,cv=5) #訓練模型 rfecv.fit(X,Y) ranks["RFECV"]=ranking(list(map(float,rfecv.ranking_)),colnames,order=-1) #Printsupportandranking print(rfecv.support_) print(rfecv.ranking_) print(X.columns)

LarsCV

最小角度回歸模型(Least Angle Regression)交叉驗證。

	#刪除第二步中不重要的特征 #X=X.drop('sex',axis=1) #實例化 larscv=LarsCV(cv=5,normalize=False) #訓練模型 larscv.fit(X,Y) ranks["LarsCV"]=ranking(list(map(float,larscv.ranking_)),colnames,order=-1) #輸出r方和估計alpha值 print(larscv.score(X,Y)) print(larscv.alpha_)
		以上是兩個交叉驗證,在對特征重要性要求高時可以使用。因運行時間有點長,這里大家可以自行運行得到結果。

創建特征排序矩陣

創建一個空字典來存儲所有分數,并求其平均值。

	
		r={} fornameincolnames: r[name]=round(np.mean([ranks[method][name] formethodinranks.keys()]),2) methods=sorted(ranks.keys()) ranks["Mean"]=r methods.append("Mean") print(" %s"%" ".join(methods)) fornameincolnames: print("%s %s"%(name," ".join(map(str, [ranks[method][name]formethodinmethods]))))

	
		LassoLinRegRFRFERidgerlasso/StabilityMean Open1.01.00.020.910.471.00.73 High0.140.00.10.360.061.00.28 Low0.020.00.080.730.050.760.27 Close0.140.00.640.550.321.00.44 Adj Close0.021.01.00.821.00.990.8 Volume0.00.00.00.00.00.00.0 H-L0.00.00.00.450.010.00.08 O-C0.851.00.01.00.531.00.73 3day MA0.00.00.00.270.011.00.21 10day MA0.00.00.020.090.00.270.06 30day MA0.00.00.00.180.00.750.16 Std_dev0.00.00.00.640.010.00.11

繪制特征重要性排序圖

將平均得到創建DataFrame數據框,從高到低排序,并利用可視化方法將結果展示出。這樣就一目了然,每個特征重要性大小。

	
		meanplot=pd.DataFrame(list(r.items()),columns=['Feature','MeanRanking']) #排序 meanplot=meanplot.sort_values('MeanRanking',ascending=False) g=sns.factorplot(x="MeanRanking",y="Feature",data=meanplot,kind="bar", size=14,aspect=1.9,palette='coolwarm')a236141c-a482-11ec-952b-dac502259ad0.png

原文標題:YYDS!使用 Python 全面分析股票數據特征

文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7002

    瀏覽量

    88943
  • 存儲
    +關注

    關注

    13

    文章

    4296

    瀏覽量

    85800
  • 頻率
    +關注

    關注

    4

    文章

    1494

    瀏覽量

    59211
  • 機器學習
    +關注

    關注

    66

    文章

    8406

    瀏覽量

    132565

原文標題:YYDS!使用 Python 全面分析股票數據特征

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    模擬電路故障診斷中的特征提取方法

    映射到一個低維向量空間,降維后保留數據的主要信息,且主分量間彼此獨立,從而使數據更易于處理。在模擬電路故障診斷中,采用主元分析實現數據壓縮和特征提取的過程是:首先將原始特征數據標準化,消除原變量的量綱
    發表于 12-09 18:15

    labview 將矩陣的特征排序,再把排序后的特征值對應的特征向量組成矩陣

    將矩陣的特征排序,取最大的前90%,再把前90%由大到小特征值所對應的特征向量組成一個新的矩陣,應該要怎么做呢?我嘗試著用特征值連到一維數
    發表于 04-17 21:11

    如何提取顏色特征

    計算機視覺的特征提取算法研究至關重要。在一些算法中,一個高復雜度特征的提取可能能夠解決問題(進行目標檢測等目的),但這將以處理更多數據,需要更高的處理效果為代價。而顏色特征無需進行大量計算。只需將數字圖像中的像素值進行相應轉換,
    發表于 10-12 06:55

    紋理圖像的特征是什么?

    紋理圖像的特征是什么?指紋圖像的特征是什么?
    發表于 06-02 07:05

    基于統計特征主分量的信號調制識別

    采用數字信號處理方法提取待識別信號的瞬時特征統計參量,利用多元統計的主分量分析方法對特征參量進行其主分量組合,以消除特征參量間的相關性和壓縮特征
    發表于 03-03 23:18 ?29次下載

    基于已知特征項和環境相關量的特征提取算法

    在現有基于已知特征特征提取算法的基礎上,提出一種基于已知特征項和環境相關量的特征提取算法。該算法通過已知特征項搜索頻繁項集,提高了
    發表于 04-18 09:37 ?17次下載

    特征頻率,特征頻率是什么意思

    特征頻率,特征頻率是什么意思 (1)基本概念:     在給定的發射中由于識別和測量頻率,例如載
    發表于 03-05 16:36 ?4965次閱讀

    克隆代碼有害性預測中的特征選擇模型

    為解決克隆代碼有害性預測過程中特征無關與特征冗余的問題,提出一種基于相關程度和影響程度的克隆代碼有害性特征選擇組合模型。首先,利用信息增益率對特征數據進行相關性的初步
    發表于 12-04 10:09 ?0次下載
    克隆代碼有害性預測中的<b class='flag-5'>特征</b>選擇模型

    一種改進的結合前景背景特征的顯著性檢測算法

    針對基于圖和流形排序( Manifold Ranking)的顯著性檢測算法(MR算法)過度依賴邊界節點的背景特征的問題,提出一種改進的結合前景背景特征的顯著性檢測算法。首先,對圖像進行超像素分割
    發表于 12-13 11:44 ?0次下載

    如何使用特征匹配和距離加權進行藍牙定位算法

    針對傳統iBeacon指紋定位技術中接收信號強度值(RSSI)波動較大、指紋庫聚類復雜、存在較大跳變性定位誤差等問題,提出一種基于排序特征匹配和距離加權的藍牙定位算法。在離線階段,該算法先對RSSI
    發表于 01-16 13:48 ?19次下載
    如何使用<b class='flag-5'>特征</b>匹配和距離加權進行藍牙定位算法

    機器學習之特征提取 VS 特征選擇

    機器學習中特征選擇和特征提取區別 demi 在 周四, 06/11/2020 - 16:08 提交 1. 特征提取 V.S 特征選擇 特征
    的頭像 發表于 09-14 16:23 ?4120次閱讀
    機器學習之<b class='flag-5'>特征</b>提取 VS <b class='flag-5'>特征</b>選擇

    融合神經網瓶頸特征與MFCC特征的符合特征構造方法

    針對梅爾頻率倒譜系數(MrCC)語音特征不能有效反映連續幀之間有效信息的問題,基于深度神經網絡相關性和緊湊性特征,提岀一種融合神經網瓶頸特征與MFCC特征的復合
    發表于 03-17 11:31 ?5次下載
    融合神經網瓶頸<b class='flag-5'>特征</b>與MFCC<b class='flag-5'>特征</b>的符合<b class='flag-5'>特征</b>構造方法

    基于自編碼特征的語音聲學綜合特征提取

    利用監督性學習算法進行語音増強時,特征提取是至關重要的步驟。現有的組合特征和多分辨率特征等聽覺特征是常用的聲學特征,基于這些
    發表于 05-19 16:33 ?27次下載

    基于幾何特征的人臉表情識別特征構造

    人臉表情作為人類情感的重要傳達方式,近年來作為情感計算的重要組成部分,人臉表情識別吸引了很多學者的關注。與其他模式識別的問題類似,構造更汋有效的統計特征是解決人臉表情識別的關鍵所在同時,由于不同種
    發表于 06-09 15:01 ?9次下載

    特征模型和特征-這是什么?

    “大家好,這是【產品線工程(PLE)專題】更新的第四篇,上一篇我們介紹了‘版本、變體和其他的基礎定義’,這一篇我們介紹特征模型和特征-這是什么”非正式地談論可變性是很有趣的一件事,但最終還是需要
    的頭像 發表于 01-05 11:16 ?834次閱讀
    <b class='flag-5'>特征</b>模型和<b class='flag-5'>特征</b>-這是什么?
    主站蜘蛛池模板: 欧美人与善交大片| 让男人玩尿道的女人| 欧美一区二区三区免费播放| 日日干夜夜艹| 一色狗影院| YELLOW高清在线观看2019| 国产精品自拍| 免费韩国伦理2017最新| 特级毛片AAAAAA| 中文字幕乱码亚洲无线三区| 成人毛片免费播放| 久久r视频| 乳女教师欲乱动漫无修版动画| 亚洲性无码av在线| 不良网站进入窗口软件下载免费| 狠狠色丁香婷婷久久综合五月| 欧美s00老人| 亚洲精品国偷拍自产在线| 99视频这里只有精品| 国产午夜婷婷精品无码A片| 暖暖日本在线手机免费完整版 | 久久亚洲午夜牛牛影视| 日韩一卡二卡三卡四卡免费观在线 | WWW污污污抽搐喷潮COM| 饥渴的新婚女教师| 日韩欧美视频一区二区| 在线观看a视频| 国产精品涩涩涩视频网站| 欧美videos人牛交| 亚洲幼女网| 国产精品久久一区二区三区蜜桃| 美女胸禁止18以下看| 亚洲区视频在线观看| 国产成A人片在线观看| 嗯啊好爽视频| 一本色道久久综合一区| 国产麻豆剧看黄在线观看| 欧美最猛性XXXXX肛交| 中文字幕无码亚洲视频| 狠狠干女人| 无套内射在线观看THEPORN|