女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

Python數據清洗和預處理入門完整指南

數據分析與開發 ? 來源:關于數據分析與可視化 ? 作者:關于數據分析與可 ? 2022-12-21 13:50 ? 次閱讀

凡事預則立,不預則廢,訓練機器學習模型也是如此。數據清洗和預處理是模型訓練之前的必要過程,否則模型可能就「廢」了。本文是一個初學者指南,將帶你領略如何在任意的數據集上,針對任意一個機器學習模型,完成數據預處理工作。

數據預處理是建立機器學習模型的第一步(也很可能是最重要的一步),對最終結果有決定性的作用:如果你的數據集沒有完成數據清洗和預處理,那么你的模型很可能也不會有效——就是這么簡單。

人們通常認為,數據預處理是一個非常枯燥的部分。但它就是「做好準備」和「完全沒有準備」之間的差別,也是表現專業和業余之間的差別。就像為度假做好事先準備一樣,如果你提前將行程細節確定好,就能夠預防旅途變成一場噩夢。

那么,應該怎么做呢?

本文將帶你領略,如何在任意的數據集上,針對任意一個機器學習模型,完成數據預處理工作。

導入數據

讓我們從導入數據預處理所需要的庫開始吧。庫是非常棒的使用工具:將輸入傳遞給庫,它則完成相應的工作。你可以接觸到非常多的庫,但在Python中,有三個是最基礎的庫。任何時候,你都很可能最終還是使用到它們。這三個在使用Python時最流行的庫就是Numpy、Matplotlib和Pandas。Numpy是滿足所有數學運算所需要的庫,由于代碼是基于數學公式運行的,因此就會使用到它。Maplotlib(具體而言,Matplotlib.pyplot)則是滿足繪圖所需要的庫。Pandas則是最好的導入并處理數據集的一個庫。對于數據預處理而言,Pandas和Numpy基本是必需的。

最適當的方式是,在導入這些庫的時候,賦予其縮寫的稱呼形式,在之后的使用中,這可以節省一定的時間成本。這一步非常簡單,可以用如下方式實現:


importnumpyasnp importmatplotlib.pyplotasplt importpandasaspd

現在,可以通過輸入如下語句讀入數據集

dataset=pd.read_csv('my_data.csv')

這個語句告訴Pandas(pd)來讀入數據集。在本文中,我也附上數據集的前幾行數據。

1e27d75a-80e6-11ed-8abf-dac502259ad0.png

我們有了數據集,但需要創建一個矩陣來保存自變量,以及一個向量來保存因變量。為了創建保存自變量的矩陣,輸入語句:

X=dataset.iloc[:,:-1].values

第一個冒號表示提取數據集的全部行,「:-1」則表示提取除最后一列以外的所有列。最后的「.values」表示希望提取所有的值。接下來,我們希望創建保存因變量的向量,取數據的最后一列。輸入語句:

y=dataset.iloc[:,3].values

記住,在查看數據集的時候,索引(index)是從 0 開始的。所以,如果希望統計列數,從 0 開始計數而不是 1?!竅:, :3]」會返回animal、age和worth三列。其中0表示animal,1表示age,2表示worth。對于這種計數方法,即使你沒見過,也會在很短的時間內適應。

如果有缺失數據會怎么樣?

事實上,我們總會遇到數據缺失。對此,我們可以將存在缺失的行直接刪除,但這不是一個好辦法,還很容易引發問題。因此需要一個更好的解決方案。最常用的方法是,用其所在列的均值來填充缺失。為此,你可以利用scikit-learn預處理模型中的inputer類來很輕松地實現。(如果你還不知道,那么我強烈建議你搞明白它:scikit-learn包含非常棒的機器學習模型)。在機器學習中,你可能并不適應諸如「方法」、「類」和「對象」這些術語。這不是什么大問題!

類就是我們希望為某目的所建立的模型。如果我們希望搭建一個棚子,那么搭建規劃就是一個類。

對象是類的一個實例。在這個例子中,根據規劃所搭建出來的一個棚子就是一個對象。同一個類可以有很多對象,就像可以根據規劃搭建出很多個棚子一樣。

方法是我們可以在對象上使用的工具,或在對象上實現的函數:傳遞給它某些輸入,它返回一個輸出。這就像,當我們的棚子變得有點不通氣的時候,可以使用「打開窗戶」這個方法。

為了使用imputer,輸入類似如下語句。


fromsklearn.preprocessingimportImputer imputer=Imputer(missing_values=np.nan,strategy=‘mean’,axis=0)

均值填充是默認的填充策略,所以其實不需要指定,加在此處是為了方便了解可以包含什么信息。missing_values的默認值是nan。如果你的數據集中存在「NaN」形式的缺失值,那么你應該關注np.nan,可以在此查看官方文檔:https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html

為了擬合這個imputer,輸入:

imputer=imputer.fit(X[:,1:3])

我們只希望在數據存在缺失的列上擬合imputer。這里的第一個冒號表示包含所有行,而「1:3」則表示我們取索引為 1 和 2 的列。不要擔心,你很快就會習慣 Python的計數方法的。

現在,我們希望調用實際上可以替換填充缺失數據的方法。通過輸入以下語句完成:

X[:,1:3]=imputer.transform(X[:,1:3])

1e35cb3a-80e6-11ed-8abf-dac502259ad0.jpg

多嘗試一些不同的填充策略。也許在某些項目中,你會發現,使用缺失值所在列的中位數或眾數來填充缺失值會更加合理。填充策略之類的決策看似細微,但其實意義重大。因為流行通用的方法并不一定就是正確的選擇,對于模型而言,均值也不一定是最優的缺失填充選擇。

畢竟,幾乎所有正閱讀本文的人,都有高于平均水平的手臂數。

如果包含屬性數據,會怎么樣呢?

這是一個好問題。沒有辦法明確地計算諸如貓、狗、麋鹿的均值。那么可以怎么做呢?可以將屬性數據編碼為數值!你可能希望使用sklearn.preprocessing所提供的LabelEncoder類。從你希望進行編碼的某列數據入手,調用label encoder并擬合在你的數據上。


fromsklearn.preprocessingimportLabelEncoder labelencoder_X=LabelEncoder() X[:,0]=labelencoder_X.fit_transform(X[:,0])

(還記得括號里的數字所表示的含義嗎?「:」表示希望提取所有行的數據,0表示希望提取第一列)

這就是將第一列中的屬性變量替換為數值所需的全部工作了。例如,麋鹿將用0表示,狗將用2表示,貓將用3表示。

你發現什么潛在問題了嗎?

標注體系暗含以下信息:所使用的數值層級關系可能會影響模型結果:3 比 0 的數值大,但貓并不一定比麋鹿大。

我們需要創建啞變量。

我們可以為貓創建一列數據,為麋鹿創建一列數據,……以此類推。然后,將每一列分別以 0/1 填充(認為 1=Yes,0 = No)。這表明,如果原始列的值為貓,那么就會在麋鹿一列得到 0,狗一列得到 0,貓一列得到 1。

看上去非常復雜。輸入 OneHotEncoder 吧!

導入編碼器,并制定對應列的索引。


fromsklearn.preprocessingimportOneHotEncoder onehotencoder=OneHotEncoder(categorical_features=[0])

接著是一點擬合和轉換。

X=onehotencoder.fit_transform(X).toarray()

現在,你的那一列數據已經被替換為了這種形式:數據組中的每一個屬性數據對應一列,并以1和0取代屬性變量。非常貼心,對吧?如果我們的Y列也是如「Y」和「N」的屬性變量,那么我們也可以在其上使用這個編碼器。


labelencoder_y=LabelEncoder() y=labelencoder_y.fit_transform(y)

這會直接擬合并將 y 表示為編碼變量:1 表示「Y」,0 表示「N」。

1e4e0e7a-80e6-11ed-8abf-dac502259ad0.jpg

訓練集與測試集的劃分

現在,你可以開始將數據集劃分為訓練集和測試集了。這已經在之前的圖像分類教程一文中論述過了。不過記得,一定要將你的數據分為訓練集和測試集,永遠不要用測試集來訓練!需要避免過擬合(可以認為,過擬合就像在一次測驗前,記憶了許多細節,但沒有理解其中的信息。如果只是記憶細節,那么當你自己在家復習知識卡片時,效果會很好,但在所有會考察新信息的真實測驗中,都會不及格。)

現在,我們有了需要學習的模型。模型需要在數據上訓練,并在另外的數據上完成測試。對訓練集的記憶并不等于學習。模型在訓練集上學習得越好,就應該在測試集給出更好的預測結果。過擬合永遠都不是你想要的結果,學習才是!

首先,導入:

fromsklearn.model_selectionimporttrain_test_split

現在,可以創建X_train、X_test、y_train和y_test集合了。

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)

一種常見的方法是將數據集按80/20進行劃分,其中80%的數據用作訓練,20%的數據用作測試。這也是為何指定test_size為0.2的原因。你也可以根據自己的需求來任意劃分。你并不需要設置random_state,這里設置的原因是為了可以完全復現結果。

特征縮放

什么是特征縮放?為什么需要特征縮放?

看看我們的數據。我們有一列動物年齡,范圍是4~17,還有一列動物價值,范圍是83,000。價值一欄的數值不僅遠大于年齡一欄,而且它還包含更加廣闊的數據范圍。這表明,歐式距離將完全由價值這一特征所主導,而忽視年齡數據的主導效果。如果歐式距離在特定機器學習模型中并沒有具體作用會怎么樣?縮放特征將仍能夠加速模型,因此,你可以在數據預處理中,加入特征縮放這一步。

特征縮放的方法有很多。但它們都意味著我們將所有的特征放在同一量綱上,進而沒有一個會被另一個所主導。

導入相關庫開始:

fromsklearn.preprocessingimportStandardScaler

創建一個需要縮放對象并調用Standard Scaler。

sc_X=StandardScaler()

直接在數據集上進行擬合以及變換。獲取對象并應用方法。


X_train=sc_X.fit_transform(X_train) X_test=sc_X.transform(X_test)

不需要在測試集上進行擬合,只進行變換。


sc_y=StandardScaler() y_train=sc_y.fit_transform(y_train)

對于啞變量而言,是否需要進行縮放?

對于這個問題,有些人認為需要,有些則認為不需要。這取決于你對模型可解釋性的看重誠度。將所有數據縮放至同一量綱固然有好處,但缺點是,這丟失了解釋每個觀測樣本歸屬于哪個變量的便捷性。

對于Y呢?如果因變量是0和1,那么并不需要進行特征縮放。這是一個具有明確相關值的分類問題。但如果其取值范圍非常大,那么答案是你需要做縮放。

恭喜你,你已經完成了數據預處理的工作!

通過少量的幾行代碼,你已經領略了數據清洗和預處理的基礎。毫無疑問,在數據預處理這一步中,你可以加入很多自己的想法:你可能會想如何填充缺失值。思考是否縮放特征以及如何縮放特征?是否引入啞變量?是否要對數據做編碼?是否編碼啞變量……有非常多需要考慮的細節。現在,你已經完全了解了這些,可以親自動手試試了,準備數據吧!

審核編輯:湯梓紅

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

    關注

    66

    文章

    8490

    瀏覽量

    134076
  • python
    +關注

    關注

    56

    文章

    4825

    瀏覽量

    86162
  • 預處理
    +關注

    關注

    0

    文章

    33

    瀏覽量

    10604

原文標題:Python數據清洗 & 預處理入門完整指南

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    機器學習為什么需要數據預處理

    數據預處理是準備原始數據并使其適合機器學習模型的過程。這是創建機器學習模型的第一步也是關鍵的一步。 創建機器學習項目時,我們并不總是遇到干凈且格式化的數據。在對
    的頭像 發表于 08-24 09:20 ?2299次閱讀
    機器學習為什么需要<b class='flag-5'>數據</b><b class='flag-5'>預處理</b>

    Python數據預處理方法

    機器學習-Python實踐Day3(特征工程--數據預處理2)
    發表于 06-03 15:55

    數據探索與數據預處理

    目錄1數據探索與數據預處理21.1 賽題回顧21.2 數據探索性分析與異常值處理21.3 相關性分析52特征工程82.1 光伏發電領域特征8
    發表于 07-12 08:37

    使用Bionconductor完成基因芯片預處理的流程

    的整體框架,自行學習其他廠商或種類(例如SNP芯片或CHIP-chip芯片)的芯片處理方法5.1快速入門例5-1 從數據包CLL中載入芯片數據,完成
    發表于 07-23 07:38

    防火墻原理入門

    防火墻原理入門 防火墻能增強機構內部網絡的安全性。防火墻系統決定了哪些內部服務可以被外界訪問;外界的哪些人可以訪問內部的服務以及哪
    發表于 08-01 10:21 ?1093次閱讀
    防火墻原<b class='flag-5'>理入門</b>

    數字信號處理入門指南

    數字信號處理入門指南什么是DSP? 數字信號處理器(DSP)采集已被數字化的現實世界的聲音、音頻、視頻、溫度、壓力或位置等信號,并從數學的角度對其進
    發表于 09-15 08:55 ?1416次閱讀
    數字信號<b class='flag-5'>處理入門</b><b class='flag-5'>指南</b>

    [Python入門指南].(Python.Tutorial).G

    介紹python的一篇較好的入門資料
    發表于 09-05 08:38 ?0次下載

    Web使用挖掘中的數據預處理模塊、實現方法及發展前景

    數據預處理是Web使用挖掘的第一個環節。預處理的對象是Web 日志文件。由于Web 日志文件的格式是半結構化的,且日志中的數據不夠完整,因此
    的頭像 發表于 11-06 09:32 ?3774次閱讀
    Web使用挖掘中的<b class='flag-5'>數據</b><b class='flag-5'>預處理</b>模塊、實現方法及發展前景

    Python的Anaconda入門指南

    Python入門學習并不是一件簡單的事情,也不是輕輕松松簡簡單單就可以快速入門的,尤其是環境問題,讓不少的Python初學者頭痛不已,本篇文章小編就帶大家看一下
    的頭像 發表于 01-22 17:32 ?2866次閱讀

    機器學習的特征預處理問題討論

    本文我們來討論特征預處理的相關問題。主要包括特征的歸一化和標準化,異常特征樣本清洗與樣本數據不平衡問題的處理。
    的頭像 發表于 03-15 17:14 ?1048次閱讀

    從Excel到Python數據分析進階指南資源下載

    pandas庫用于數據處理,我們從1787頁的pandas官網文檔中總結出最常用的36個函數,通過這些函數介紹如何通過Python完成數據生成和導入、數據
    發表于 04-06 09:44 ?0次下載
    從Excel到<b class='flag-5'>Python</b><b class='flag-5'>數據</b>分析進階<b class='flag-5'>指南</b>資源下載

    硅晶片的蝕刻預處理方法包括哪些

    硅晶片的蝕刻預處理方法包括:對角度聚合的硅晶片進行最終聚合處理,對上述最終聚合的硅晶片進行超聲波清洗后用去離子水沖洗,對上述清洗和沖洗的硅晶片進行SC-1
    發表于 04-13 13:35 ?1202次閱讀
    硅晶片的蝕刻<b class='flag-5'>預處理</b>方法包括哪些

    什么是大數據采集和預處理

    一般情況下,大數據處理的流程為:數據采集和預處理、數據存儲、數據分析和數據可視化。
    的頭像 發表于 02-15 14:22 ?4612次閱讀

    PyTorch教程之數據預處理

    電子發燒友網站提供《PyTorch教程之數據預處理.pdf》資料免費下載
    發表于 06-02 14:11 ?0次下載
    PyTorch教程之<b class='flag-5'>數據</b><b class='flag-5'>預處理</b>

    每日一課 | 智慧燈桿之大數據預處理技術介紹

    2.大數據預處理技術大數據預處理技術主要完成對已接收數據的辨析、抽取、清洗等操作。(1)抽取:因
    的頭像 發表于 04-07 14:38 ?869次閱讀
    每日一課 | 智慧燈桿之大<b class='flag-5'>數據</b><b class='flag-5'>預處理</b>技術介紹