數學建模之資料處理

2021-10-17 09:45:59 字數 3643 閱讀 5496

前言:資料預處理是美賽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...