第一次參加DC比賽總結

2021-08-26 23:18:01 字數 3474 閱讀 8341

第一次參加dc比賽,選擇乙個不太難的「遊戲玩家付費金額**大賽」進行,雖說看了各種』top 1%』、』top 10%』、』top 5%』等文章,成績依然還是不理想。總結原因發現還是在對資料的了解和特徵工程技巧上沒有下足功夫或者沒有足夠的經驗,下面就細節問題和環節作簡要總結。

資料的第一映像非常重要,決定了下一步資料處理和特徵工程的方向,所以一定要詳細充分的檢視資料後再下手。

熟悉資料分為兩步:

1. 資料形態(均值、最值、分布等),資料某些特徵的有哪些有意思的資訊(時間、座標)

2. 資料有哪些特徵(高維度、稀疏),是否需要預處理(nan、inf、離群點)

這裡有個淺顯的例子,適合初學者入門:

【半程彩蛋】選手分享,思路解答!

感興趣的特徵都有哪些資訊,幾個特徵放一起能夠發現什麼,特徵之間有無關聯,最好能畫張圖,更加清晰直觀些。這些都是需要在了解資料時有乙個初步分認識。

熟悉資料型別轉換

float轉datatime,datatime轉string,string轉float

特徵切片,一轉多

經緯度座標轉極座標(以某一點為圓心)

統計某一特徵在參考下的數量,作為新特徵。以『>某閾值』得到布林型資料,再用values_counts()合成新特徵。

else

0, axis=1)

利用模型自帶的feature_importance_,寫出乙個特徵選擇函式:

#alg:模型,columns:特徵集合

defselect_important_features

(alg,columns):

importances=zip(map(lambda x: round(x, 4), alg.feature_importances_), columns)

importance=

sum=0

for i in importances:

if i[0]>0.008:

sum=sum+i[0]

print("num : %f | sum: %3f" % (len(importance), sum))

return importance

importance=select_important_features(rfr,x_train.columns)

利用r2找出各個特徵與自變數y值相關性大小

# 模型挑選隨機森林,引數預設

rfr=randomforestregressor()

#將特徵按評分排序,存入scores中

scores =

for i in range(x_train.shape[1]):#分別讓每個特徵與響應變數做模型分析並得到誤差率

#r2_score

score = cross_val_score(rfr, x_train.values[:, i:i+1], y_train, scoring="r2",cv=shufflesplit(len(x_train), 3, .3))

print(sorted(scores, reverse=true))#對每個特徵的分數排序

關於特徵選擇,方法還有很多,這裡有比較全面的總結:

結合scikit-learn介紹幾種常用的特徵選擇方法

模型按照分類和回歸不同,評價指標不同。

分類:混合矩陣、f1_score

回歸:rmse、rmae、r2_score

sklearn庫里有專門計算評價指標的函式:

from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error用法也很簡單,就是將**值和真實值兩個陣列作為引數傳入函式中,就能得到對應的指標值。

稀疏資料——稀疏模型lasso

引數解釋: alpha:正則化強度; 必須是正浮點數

套索(適合稀疏資料集)

lasso:使用結構風險最小化=損失函式(平方損失)+正則化(l1範數)al

pha alp

ha在調參時,可以使用lassocv嘗試盡可能多的值,因為在其他條件不變的情況下,alpha與loss變化是一條凹曲線,存在乙個極值點。如圖:

缺點:

l1正則化像非正則化線性模型一樣也是不穩定的,如果特徵集合中具有相關聯的特徵,當資料發生細微變化時也有可能導致很大的模型差異。

嶺回歸:ridge

l2懲罰項中係數是二次方的,l2正則化會讓係數的取值變得平均。

對於關聯特徵,這意味著他們能夠獲得更相近的對應係數,對於特徵選擇來說一種穩定的模型,不像l1正則化那樣,係數會因為細微的資料變化而波動。

l2正則化對於特徵理解來說更加有用:表示能力強的特徵對應的係數是非零。

使用結構風險最小化=損失函式(平方損失)+正則化(l2範數)

ridge:固定阿爾法,求出最佳w,阿爾法與w的範數成反比

ridgecv:多個阿爾法,得出多個對應最佳的w,然後得到最佳的w及對應的阿爾法

帶cv的模型(留一交叉驗證)形如ridgecv、lassocv,使用非常簡單直觀,但是之前一直不確定帶cv為什麼能調參,通過閱讀發現,帶cv的可以快速找到最佳引數,不像gridsearchcv那樣可以同時調多個引數,但是速度上佔優明顯。

這裡有一篇將cv訓練過程視覺化的文章:

優化嶺回歸引數alpha優化

隨機森林固有缺陷

1. 隨機森林在解決回歸問題時並沒有像它在分類中表現的那麼好,這是因為它並不能給出乙個連續型的輸出。當進行回歸時,隨機森林不能夠作出超越訓練集資料範圍的**,這可能導致在對某些還有特定雜訊的資料進行建模時出現過度擬合。

2. 對於許多統計建模者來說,隨機森林給人的感覺像是乙個黑盒子——你幾乎無法控制模型內部的執行,只能在不同的引數和隨機種子之間進行嘗試。

先前多試驗幾種模型,其目的有三,一是熟悉模型,二來可以進一步加深對資料的理解,三是為最後的模型堆疊做準備工作。

stacking的基模型、目標模型的選擇?

mlxtend庫,stackingcvregressor方法,調參時目標模型引數前加』meta-『

spyder的布局、使用方法習慣都是模仿的matlab,幾乎繼承了matlab的「工作空間」的功能所有優點:可以很方便地觀察變數的值,可以開多個consoles同時執行。

jupyternotebook嵌入了markdown\raw nbconvert\heading不同的編寫文件型別,他的核心競爭力在於「文學程式設計」的思想。用之可以很方便、快捷地寫乙份說明文件,將說明文字、**、圖表、公式、結論都整合在乙個文件中。

這次的比賽,我的工作環境是從notebook轉到spyder的,我覺得從生產效率的角度出發,spyder要明顯更勝一籌,用之一鼓作氣的完成資料探勘,一直使用程式設計思維而不用擔心思維切換和跳轉不適等問題。

第一次組隊比賽總結

今天下午又打了一場比賽,加上前天打的那場,這周一共打了兩場了,也是暑假以來第一次打組隊賽,在老師的合理安排下,我們三個三個組成一隊,互相溝通,互相了解,進行比賽。比賽開始後,我們就在qq上開啟了語音通話,這樣可以更加容易溝通交流,使得我們的配合更加默契,剛開始,我們分開看題,尋找可以快速a的簡單題,...

第一次參加code reivew

從上家公司換工作到網際網路公司後,昨天第一次參加了code reivew。我之前的理解,以為code reivew和 提交時的pull request一樣,主要看對方的 實現,以發現 中的問題。其實不是,昨天參加完code review後,才對code reivew的過程有了大致的了解。code r...

2016第一次參加noi

2016年11月19日是我第一次參加noi比賽,我的內心十分緊張並且激動。我是今年暑假剛學習程式設計,這次競賽我的老師說能做出第一道就已經很不錯了,並且告訴我們這次去參加這個競賽主要是要積累經驗,於是我的內心沒有先前那麼緊張了。考試前一周,我認認真真的複習並背記了關於程式設計的一些內容,這也使我有了...