初学者上手python建模
新手可以上天池或者是kaggle上下載數據,我就是在天池上的學習賽找模型進行學習的。
當我們拿到一個csv后,就要審視這個文檔里的數據。我現在在做的模型就是有關客戶貸款違約的一個比賽吧。那么首先要導入這個數據啊,這個csv分為兩個數據集,一個是train,另外兩個是test,就是說這個這個比賽的意義就是通過訓練集的訓練(訓練集的數據量是很大的)然后將調教好的模型用于測試集,分數越高越好。
附上鏈接
零基礎入門金融風控-貸款違約預測相關的問題-天池大賽-阿里云天池
拿到數據后呢,我們首先要審視一下數據,至于task2提到的數據可視化,我的指導老師認為,在實際的商業案例中,用來做ppt的,你再開始建模的時候呢,完全不用管好了。首先是導入數據。這邊導入數據是要用到一些包的,上午我看到一文章說,現在都愛pandas,產生的是dataframe(一個矩陣形式,有行有列)。好,那我們就要把它從本地文件導入到jupyter里面,其實導入到python里,這里代碼這樣寫
train = pd.read_csv('C:\\Users\harrison.huang\\Desktop\\train (1).csv')
pd是包pandas的簡寫。記住是雙斜杠,如果單斜杠不行的話。
ok,接下來,這些數據,比如說有些位置他是沒有值的,就好像你的數據存在收集不到,或者是說誤刪了怎么樣。那么你要宏觀的了解一下那些數據缺失了。數值特征就是說數值,對象特征就是說以包含了其他的字符。這里我們要分開這兩個數據。類別型也是對象型特征。
numerical_fea = list(train.select_dtypes(exclude=['object']).columns)
category_fea = list(filter(lambda x: x not in numerical_fea,list(train.columns)))
運行完這個命令之后就可以將類別型變量和數值型變量分別開了。
1、熵值法建模:不需要類別型變量,那就清除
代碼:data.drop(category_fea)。所以清除函數drop()。
比賽數據相比真實場景的數據相對要干凈一些,現實場景中,例如你從銀行收到數據,但是你會發現很多數據都是大片大片缺失的,在這種情況下,就要認真考慮數據值如何填充的問題了,比如說,如果是時間序列的一個數據(股價),那么現在的價格就很大程度上受到了上一時期數據的影響,因此,可以使用上面一格的數據直接填充。那么對于橫截面數據,可以觀察這個數據的分布。如果是呈正態分布的,那么就可以取中位數或者平均數。
在補充缺失值之前,我們需要將缺失值太多的列直接刪去,一般缺失值大于百分之50的列,以及全部都是一樣的值的列,就都可以刪去了,因為沒有什么太大的意義。
刪除列的代碼:
def remcolumns(data):
? ? t = int(0.5*data.shape[0])
? ? data = data.dropna(thresh=t,axis=1)#保留至少含有百分之50數據的列
? ? #data = data.loc[:, (data != 0).any(axis=0)]
? ? return data
def del_rows(data):
? ? t = int(0.7*data.shape[1])
? ? data = data.dropna(thresh=t)#保留至少有 百分之70數據的行
? ? #data = data[(data.T != 0).any()]
? ? return data
data = remcolumns(data)
data = del_rows(data)
data
失值填充代碼:
1、把所有缺失值替換為指定的值0。? ?data?= data.fillna(0)
2、用缺失值上面的值替換缺失值。? data?= data.fillna(axis=0,method = 'ffill')
3、縱向用缺失值下面的值替換缺失值,且設置最多只填充兩個連續的缺失值
data?= data.fillna(axis=0 ,method = 'bfill',limit= 2)
4、用這一列的平均值替代??data_clean = data.fillna(data.mean())
axis的重點在于方向,而不是行和列。1表示橫軸,方向從左到右;0表示縱軸,方向從上到下。
關于ffill和bfill的區別,附上鏈接:填補缺失值的兩種方法ffill和bfill_zyq_go的博客-CSDN博客_ffillPandas填充缺失值兩種方法:bfill/ffill對比https://blog.csdn.net/weixin_43041009/article/details/106567123?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164679381616780264058637%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164679381616780264058637&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-106567123.pc_search_result_cache&utm_term=ffill%E5%92%8Cbfill&spm=1018.2226.3001.4187
在對部分數據進行這個數據填充時,經常會遇到一些機器無法是識別的類型特征(例如帶漢字的),這個時候就要把這個漢字按照規律轉化為數字,就是所謂的類別轉換,就是為了機器可以較好的識別。
補上數據缺失的部分后,這時,我們就要開始異常值的處理了。異常值,即在數據集中存在不合理的值,又稱離群點(outlier)。下面這個鏈接講的很好,都去看看。
數據分析 第五篇:異常值分析 - 悅光陰 - 博客園異常值在統計學上的全稱是疑似異常值,也稱作離群點(outlier),異常值的分析也稱作離群點分析。異常值是指樣本中出現的“極端值”,數據值看起來異常大或異常小,其分布明顯偏離其余的觀測值。異常值分析是https://www.cnblogs.com/ljhdo/p/5061297.html
異常值的處理目前來說,我接觸了兩種,一種就是所謂的3segema檢驗,大家學概率論與數理統計的時候就應該學習過。這里我的業界老師說,這個不咋用,大多數都用箱線圖。那么接下來我們認真研究一下箱線圖
首先我們要了解一下四分位點內距(Inter-Quartile Range,IQR),是指在第75個百分點與第25個百分點的差值,或者說,上、下四分位數之間的差,計算IQR的公式是:IQR = Q3 ? Q1 。
通常,把小于 Q1 - 1.5 * IQR 或者大于 Q3 + 1.5 * IQR的數據點視作離群點,探測離群點的公式是:outliers =? value < ( Q1 - 1.5 * IQR )? or value > ( Q3 + 1.5 * IQR )
這種探測離群點的方法,是箱線圖默認的方法,箱線圖提供了識別異常值/離群點的一個標準:
異常值通常被定義為小于?QL?- l.5 IQR?或者 大于?Qu?+ 1.5 IQR的值,QL稱為下四分位數,?Qu稱為上四分位數,IQR稱為四分位數間距,是Qu上四分位數和QL下四分位數之差,其間包括了全部觀察值的一半。
如果,我們在特征工程部份進行了分箱,那么就可以不用進行異常值處理??(老師說的)所以說特征工程就是在建模之前,把數據給徹底的整理好,
寫到這,我認為我還是需要再了解一下特征工程。下面附上鏈接。
什么是特征工程?如何進行特征工程?_Machine Learning with Turing's Cat-CSDN博客_特征工程我的機器學習教程「美團」算法工程師帶你入門機器學習 已經開始更新了,歡迎大家訂閱~任何關于算法、編程、AI行業知識或博客內容的問題,可以隨時掃碼關注公眾號「圖靈的貓」,加入”學習小組“,沙雕博主在線答疑~此外,公眾號內還有更多AI、算法、編程和大數據知識分享,以及免費的SSR節點和學習資料。其他平臺(知乎/B站)也是同名「圖靈的貓」,不要迷路哦~目錄...https://blog.csdn.net/qq_39521554/article/details/78877505?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164620496316780271953543%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164620496316780271953543&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-78877505.pc_search_result_cache&utm_term=%E7%89%B9%E5%BE%81%E5%B7%A5%E7%A8%8B&spm=1018.2226.3001.4187
?接下來就是對特征進行篩選。
當數據預處理完成后,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。通常來說,從兩個方面考慮來選擇特征:
1、特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。
2、特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。
首先是過濾法(fliter):方差選擇法,相關系數法
?
?
ok,那么說,我們已經知道存在一個θ,但是要把它如何找出來呢?這里涉及代價函數和梯度
首先,我們可能出現如下的這種多凸函數,但是我們要找的就是最低點,因此可能找的是極小值不是最小值,所以我們要從開始就找下降最快的這個方向,以達到最低點。
不斷下降后,找到的最低點,就是能夠成為分界線的θ值。
接下來,學習xgboost了
白話機器學習算法理論+實戰番外篇之Xgboost_Miracle8070-CSDN博客_白話機器學習算法
總結
以上是生活随笔為你收集整理的初学者上手python建模的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频剪辑pr教程
- 下一篇: python数学建模|综合评价方法