前言:資料預處理是美賽c題最重要的組成部分,十分考驗我們對問題的理解與抽象,我們的重心應該放在資料處理而非演算法上,演算法只需選擇合適的即可,無需高大上!下面介紹數模中資料預處理涉及到的一些重要。
2.原始資料的殘缺值處理與異常值檢測
2.1.3 knn演算法填充
2.1.4 擬合值/**值填充
2.2 異常值檢測
3.特徵選擇與處理
3.2 標準化、歸一化、中心化
3.3 資料集劃分
4.常用**
拿美賽c題為例,20年、21年的資料壓縮前分別為4.6mb和662.8mb,由此可見美賽的c題對於資料量的要求更高了,除此之外,若我們需要額外的資料集,則需從4中找到合適的**進行搜尋。
拿到資料後,一般都是csv或excel檔案,我們通常使用python的pandas庫進行資料預處理,具體內容包含原始資料的異常值檢測、殘缺值處理以及特徵選擇與處理。
通常會將資料轉成pandas.dataframe進行操作,可參考博文根據題意,我們需要把題目需求抽象成乙個合適的數學模型,可能涉及分類、聚類、擬合、**、評估、優化等方面。為此我們設定乙個大方向,然後以流程圖的形式繪製出發散性的樹形圖(即各個小目標),從而完善我們的整個模型框架,從各個小目標中分別對資料進行處理,處理流程如下所示。
2.1.1 鄰近替換【matlab的fillmissing方法】
test_data1=fillmissing(test_data,'previous');
test_data1=fillmissing(test_data,'next');
test_data1=fillmissing(test_data,'nearest');
test_data1=fillmissing(test_data,'linear');
2.1.2 插值法填充
2.1.2.1 分段三次hermite插值法
% x為已知樣本點的橫座標,y是已知樣本點的縱座標
% new_x是要插入處對應的橫座標,返回p為new_x帶入插值多項式下的值
p = pchip(x,y,new_x)
2.1.2.2 三次樣條插值法% x為已知樣本點的橫座標,y是已知樣本點的縱座標
% new_x是要插入處對應的橫座標,返回p為new_x帶入插值多項式下的值
p = spline(x,y,new_x)
詳情見部落格hermite插值法和三次樣條插值法2.1.3 knn演算法填充
根據樣本觀測值之間的相關性,利用歐氏距離尋找與缺失觀測最相似的k個樣本中的觀測,填補缺失值。
請參考sklearn庫實現的文章2.1.4 擬合值/**值填充
選擇乙個合適的擬合/**模型,將擬合值/**值直接填充即可。
2.2.1 拉依達準則【發現異常值】
參考文章
針對於pandas dataframe,直接求出標準差sigma進行篩選即可找到異常值。
2.2.2 替換異常值
替換方法跟缺失值的替換一致,我們可以直接將其看作缺失值進行處理,替換方法如上。
特徵選擇是乙個抽象的過程,直接取決於1.2中對題目的抽象。
3.1.1 sklearn中的特徵選擇
sklearn.feature_selection
模組中的類能夠用於資料集的特徵選擇/降維,以此來提高**模型的準確率或改善它們在高維資料集上的表現。
3.1.1.1 移除低方差特徵
它會移除所有方差不滿足閾值的特徵。預設設定下,它將移除所有方差為0的特徵,即那些在所有樣本中數值完全相同的特徵。
from sklearn.feature_selection import variancethreshold
x =[[0
,0,1
],[0
,1,0
],[1
,0,0
],[0
,1,1
],[0
,1,0
],[0
,1,1
]]# 移除那些超過80%的資料都為1或0的特徵
sel = variancethreshold(threshold=(.8
*(1-
.8)))
sel.fit_transform(x)
'''array([[0, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 0],
[1, 1]])
移除了第一列特徵,第一列中特徵值為0的概率達到了 p = 5/6 > .8
'''
3.1.1.2 單變數特徵選擇
單變數特徵選擇基於單變數的統計測試來選擇最佳特徵。它可以看作**模型的一項預處理。
from sklearn.datasets import load_iris
from sklearn.feature_selection import selectkbest
from sklearn.feature_selection import chi2
iris = load_iris(
)x, y = iris.data, iris.target
print
(x.shape)
x_new = selectkbest(chi2, k=2)
.fit_transform(x, y)
print
(x_new.shape)
3.1.1.3 遞迴特徵消除
3.1.1.4 selectfrommodel選擇特徵
…
詳細內容請參考文章3.2.1 標準化
對不同特徵維度的資料進行伸縮變換,使不同度量之間的特徵具有可比性,同時不該改變原始資料的分布狀態,轉化為無量綱的純數值後,便於不同單位或量級的指標能夠進行比較、加權。優點
3.2.2 歸一化
對不同特徵維度的資料進行伸縮變換,使各個特徵維度對目標函式的影響權重使一致的,使扁平分布伸縮成圓形分布。優點
3.2.3 中心化
乙個平移的過程,平移後資料中心為原點。例如在使用pca之前需要進行中心化,才能更好的表示原資料的分布情況;或是在神經網路訓練的過程中。
詳細介紹內容請參考文章
多種標準化的python**可參考用於訓練的資料集通常會劃分為訓練集和測試集【一般7:3左右】
可以直接使用sklearn庫的train_test_split進行劃分
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=
0.3)
常用**來自該文章
Python之資料處理
靠別人不如靠自己,學學學學學學學學!原資料 需求 coding utf 8 txtfile aminer1.txt newtxtfile open new txtfile,w with open txtfile,r as file to read lines file to read.readlin...
python之資料處理
檔案資料讀寫的基本操作 import this 本地檔案的界定 指向乙個本地儲存的檔案,是乙個連線或者乙個對映 path1 c users 11786 desktop test.txt 正斜線兩個或者反斜線乙個來用於資料路徑的表達 再或者用r 寫在檔案路徑外面 推薦第三種 path2 c users...
資料互動之資料處理
資料互動必須通過協議來實現,所以互動雙方必須遵循一定的讀寫規則 我的方法很簡單但可以用,如果大家有好的方法,不妨交流一下 實現方法 資料流類datastream有兩個char 型指標,分別用來儲存讀寫的資料,還有w pos,r pos兩個資料用來記錄讀寫的位置,而且要用到互斥鎖,確保指標的安全性 v...