日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

机器学习工作流程第一步:如何用Python做数据准备?

發(fā)布時(shí)間:2025/7/14 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习工作流程第一步:如何用Python做数据准备? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇的內(nèi)容是一系列針對(duì)在Python中從零開(kāi)始運(yùn)用機(jī)器學(xué)習(xí)能力工作流的輔導(dǎo)第一部分,覆蓋了從小組開(kāi)始的算法編程和其他相關(guān)工具。最終會(huì)成為一套手工制成的機(jī)器語(yǔ)言工作包。這次的內(nèi)容會(huì)首先從數(shù)據(jù)準(zhǔn)備開(kāi)始。

—— 來(lái)自Matthew Mayo, KDnuggets

似乎大家對(duì)機(jī)器學(xué)習(xí)能力的認(rèn)知總是簡(jiǎn)單到把一系列論據(jù)傳送到越來(lái)越多的數(shù)據(jù)庫(kù)和應(yīng)用程序界面中,接著就期待能有一些神奇的結(jié)果出現(xiàn)。可能你對(duì)在這些數(shù)據(jù)庫(kù)里究竟發(fā)生了什么有自己很好的理解—— 從數(shù)據(jù)準(zhǔn)備到建模到結(jié)果演示呈現(xiàn)等等,但不得不說(shuō)你依然需要依賴于這些紛繁的工具去完成自己的工作。

  

這其實(shí)很正常。我們用被準(zhǔn)確檢驗(yàn)證明過(guò)能運(yùn)行的工具來(lái)完成一些日常的任務(wù)是無(wú)可厚非的。重新發(fā)明使用那些不能有效滾動(dòng)的輪子不是最好的辦法。這樣會(huì)有很多局限,也會(huì)浪費(fèi)很多的不必要的時(shí)間。無(wú)論你是使用開(kāi)放源代碼還是被授權(quán)的工具來(lái)完成你工作,這些代碼工具已經(jīng)被很多人反復(fù)試用升級(jí)以確保當(dāng)你上手使用的時(shí)候能夠以最好的質(zhì)量完成你的工作。

然而,有些苦活累活你自己做也是有價(jià)值的,即便是作為一種教育性的努力。我不是要推薦你們從零開(kāi)始通過(guò)自己深度學(xué)習(xí)練習(xí)寫(xiě)出一個(gè)程序框架,至少不能一直這樣,但哪怕只有一次通過(guò)不斷的試驗(yàn)和失敗,從頭開(kāi)始寫(xiě)出和自己的算實(shí)現(xiàn)它們的支持工具也是非常好的。我可能說(shuō)的不對(duì),但我認(rèn)為如今在學(xué)習(xí)機(jī)器學(xué)習(xí)能力、數(shù)據(jù)科學(xué)、人工智能等方面的大多數(shù)人都沒(méi)有在這么做。

所以讓我們從頭開(kāi)始,來(lái)學(xué)習(xí)在Python里建立一些機(jī)器學(xué)習(xí)能力的相關(guān)知識(shí)。

“From Scratch” 究竟是什么意思?

首先,我先申明:當(dāng)我提到“From Scratch”,我的意思是盡可能少的借助外界的幫助。當(dāng)然這也是相對(duì)的,但是為了達(dá)成我們的目標(biāo),我會(huì)劃定界限,當(dāng)我們?cè)趯?xiě)自己的矩陣模型、數(shù)據(jù)框或者構(gòu)建自己的數(shù)據(jù)庫(kù)時(shí),我們會(huì)分別使用Python中的numpy、panda和matplotlib庫(kù)。在某些情況下,我們甚至不會(huì)使用這些庫(kù)的全部功能。我們稍后會(huì)討論,讓我們先暫時(shí)放一放它們的名字以便大家更好的理解。在Python自帶的庫(kù)中自帶的功能原則上都是可以使用的,但除此之外,我們就要自己來(lái)寫(xiě)了。

我們需要從一個(gè)點(diǎn)入手,那就讓我們從一些簡(jiǎn)單的數(shù)據(jù)準(zhǔn)備任務(wù)開(kāi)始吧。開(kāi)始的時(shí)候我們會(huì)慢一點(diǎn),但當(dāng)我們對(duì)(要學(xué)習(xí)的東西)有了一點(diǎn)感覺(jué)以后,我們會(huì)逐漸加快速度。除了數(shù)據(jù)準(zhǔn)備,我們還需要數(shù)據(jù)轉(zhuǎn)換、結(jié)果演示和呈現(xiàn)工具——更不必說(shuō)機(jī)器學(xué)習(xí)能力算法了——來(lái)達(dá)成我們我們即將要完成的目標(biāo)。

我們的想法是手動(dòng)拼接任何我們需要的重大功能,以便完成我們的機(jī)器學(xué)習(xí)能力任務(wù)。當(dāng)序列展開(kāi)的時(shí)候,我們可以添加新的工具和算法,同時(shí)我們也能重新思考我們以前的假設(shè)(是否正確),使整個(gè)過(guò)程盡可能重復(fù)迭代,就像它會(huì)漸近一樣。慢慢的,我們會(huì)集中精力在我們的目標(biāo)上,制定策略來(lái)完成目標(biāo),把它們運(yùn)用到Python里,再檢驗(yàn)它們是否能夠運(yùn)行。

最終的結(jié)果,就想我們現(xiàn)在預(yù)期的一樣,會(huì)是有序排列在我們自己的簡(jiǎn)易的機(jī)器學(xué)習(xí)數(shù)據(jù)庫(kù)中的一系列簡(jiǎn)單的Python模型。對(duì)于初學(xué)者,我相信這是理解機(jī)器學(xué)習(xí)過(guò)程、工作流和算法如何運(yùn)行的非常寶貴的經(jīng)驗(yàn)。

工作流(workflow)究竟是什么意思?

工作流對(duì)不同的人意味著不同的意思,但是我們這里說(shuō)的工作流指的是機(jī)器學(xué)習(xí)項(xiàng)目中的一部分。我們有很多過(guò)程框架來(lái)幫助我們追蹤我的工作進(jìn)程,但現(xiàn)在讓我們簡(jiǎn)化到一下的這些:

  • 獲取數(shù)據(jù)

  • 處理/準(zhǔn)備數(shù)據(jù)

  • 建立模型

  • 解釋呈現(xiàn)結(jié)果

在我們真正做的時(shí)候我們可以拓展,但是這是我們現(xiàn)在自己設(shè)計(jì)的簡(jiǎn)單的機(jī)器學(xué)習(xí)的過(guò)程框架。同時(shí),“輸送管(小箭頭)”暗含了把工作流中各功能聚集在一起的能力,所以讓我們把這些記住然后繼續(xù)向前。

  

獲得數(shù)據(jù)

在我們建立自己的模型之前,我們需要一些數(shù)據(jù),還需要確認(rèn)這些數(shù)據(jù)與我們合理的期望相符合。為了檢測(cè)的目的(而不是訓(xùn)練或測(cè)試,但只是測(cè)試我們自己的設(shè)備),我們會(huì)使用虹膜數(shù)據(jù)集,你可以從這里下載。盡管我們可以在網(wǎng)上找到很多版本的數(shù)據(jù)集,但我建議我們都使用相同的原始數(shù)據(jù),以確保我們的準(zhǔn)備工作正常運(yùn)行。

讓我們來(lái)看一看:

  

  

既然我們已經(jīng)知道了這個(gè)簡(jiǎn)單的數(shù)據(jù)集和它對(duì)應(yīng)的文件,我們先來(lái)想一想我們需要做什么使原始數(shù)據(jù)演變成我們想要的結(jié)果:

  • 數(shù)據(jù)需要儲(chǔ)存成CSV格式的文件

  • 實(shí)例大部分由有數(shù)字屬性的值組成

  • 組別是經(jīng)過(guò)分組的內(nèi)容http://www.wmyl15.com/

到目前為止,以上沒(méi)有一種是對(duì)所有的數(shù)據(jù)集都適用的,但是也沒(méi)有任何一個(gè)是只能適用于某一種數(shù)據(jù)集的。這使得我們能夠有機(jī)會(huì)編寫(xiě)我們可以以后重復(fù)使用的代碼。好的編程練習(xí)會(huì)讓我們集中于重復(fù)利用性和模塊性。

一些簡(jiǎn)單的探索性數(shù)據(jù)分析被羅列如下:

  

(上圖為具體數(shù)值,下圖為圖像化數(shù)據(jù))

  

準(zhǔn)備數(shù)據(jù)

雖然數(shù)據(jù)準(zhǔn)備在我們現(xiàn)在這個(gè)特定的情境中需要的很少,但是有時(shí)還是會(huì)需要。尤其是我們需要確認(rèn)我們解釋了標(biāo)題行,去除了任何pandas呈現(xiàn)出來(lái)的參數(shù),并且把我們的每一次組的值從名字型的轉(zhuǎn)化成數(shù)值型的。因?yàn)樵谖覀兪褂媚P蜁r(shí)已經(jīng)沒(méi)有名字性數(shù)值了,所以到此為止至少就沒(méi)有更復(fù)雜的轉(zhuǎn)化了。

最終,我們也需要一個(gè)對(duì)我們自己的算法的更好的數(shù)據(jù)呈現(xiàn),所以我們?cè)诶^續(xù)向前進(jìn)行之前會(huì)確保我們最終呈現(xiàn)的是一個(gè)矩陣——或者numpy nadarry。我們的數(shù)據(jù)準(zhǔn)備工作流接下來(lái)會(huì)做一下的表格:

  

同時(shí),我們需要主要我們沒(méi)有理由相信所有有趣的數(shù)據(jù)都會(huì)被儲(chǔ)存在被逗號(hào)分開(kāi)的文件里。我們可能希望能夠從一個(gè)SQL數(shù)據(jù)庫(kù)里或者直接從網(wǎng)上獲取數(shù)據(jù),從這兩個(gè)地方找到的數(shù)據(jù)我們以后還能返回去回看。

首先,讓我們寫(xiě)一個(gè)簡(jiǎn)單的函數(shù),把一個(gè)CSV文件上傳到DataFrame。當(dāng)然,這在內(nèi)網(wǎng)做很容易,但是再往前想一步我們可能想再加一些額外的步驟到我們自己的數(shù)據(jù)集里以便我們以后上載函數(shù)。

  

這個(gè)編碼是相當(dāng)直接的。一行一行的讀數(shù)據(jù)文件就完成了一些額外的預(yù)先加工,比如忽略了那些內(nèi)容非數(shù)據(jù)的行(我們認(rèn)為在數(shù)據(jù)文件中評(píng)價(jià)是由井號(hào)鍵開(kāi)始的,盡管這很荒謬。)我們可以詳細(xì)說(shuō)明這個(gè)數(shù)據(jù)集文件是否包括標(biāo)題,我們也可以接受csv和tsv文件,csv文件是默認(rèn)的設(shè)置。

有一些錯(cuò)誤檢查存在,但它還并不是很健全,所以我們或許可以晚一點(diǎn)再回來(lái)說(shuō)這個(gè)話題。此外,逐條讀文件再逐條決定要對(duì)這些行做什么,比直接用內(nèi)置功能把處理干凈的一致的cs一文件直接讀到DataFrame中要慢,但權(quán)衡之后我們發(fā)現(xiàn)允許更多的靈活性,在這一階段是值得的(但讀大的文件可能會(huì)發(fā)花費(fèi)很久的時(shí)間)。不要忘了,如果一部分內(nèi)置操作不是最好的方法,我們可以晚一些再做調(diào)整。

在我們嘗試運(yùn)行自己的編碼之前,我們需要來(lái)寫(xiě)一個(gè)函數(shù),把名字類數(shù)值轉(zhuǎn)化成數(shù)字類數(shù)值。為了推廣函數(shù),我們需要使它能夠用于數(shù)據(jù)集中的任何屬性的數(shù)值,不僅僅是運(yùn)用于不同的類別。我們還應(yīng)該跟蹤屬性名稱最終是否成為了整數(shù)。有了之前把csv或ts me的數(shù)據(jù)文件上傳pandas的DataFrame的步驟經(jīng)驗(yàn),這個(gè)函數(shù)應(yīng)該同時(shí)接受一個(gè)pandas DataFrames以及被轉(zhuǎn)化為數(shù)字的屬性名稱。

我們還要注意,我們回避了關(guān)于使用單熱編碼的話題,這涉及到分類的非分類屬性,但我認(rèn)為我們以后還會(huì)回到這個(gè)話題。

  

上述的函數(shù)又是一個(gè)簡(jiǎn)單的,但是能幫助我們完成目標(biāo)函數(shù)。我們可以用很多不同的方式來(lái)完成這個(gè)任務(wù),包括使用pandas內(nèi)置的功能,但是讓你從一些會(huì)讓你有些累的苦差事開(kāi)始做就是這個(gè)函數(shù)的意義。

現(xiàn)在我們可以從文件中加載一個(gè)數(shù)據(jù)集,然后把分類屬性值轉(zhuǎn)換成數(shù)字屬性值(我們也可以保留這些映像在字典中供以后使用)。就像之前提到的,我們希望我們的數(shù)據(jù)集最終是以numpy ndarry的形式存在,這樣我們可以在自己的算法中很簡(jiǎn)單的使用。同樣的,這是一個(gè)簡(jiǎn)單的任務(wù),但寫(xiě)一個(gè)函數(shù)會(huì)讓我們?cè)谝院笮枰臅r(shí)候還可以以此為準(zhǔn)。

  

即使以前任何的功能都沒(méi)有過(guò)度的殺傷力,但這個(gè)功能有可能有。但請(qǐng)忍耐我,我們遵守非常全面的編程準(zhǔn)則--如果過(guò)于謹(jǐn)慎的話。在我們繼續(xù)往下講的過(guò)程中會(huì)有很好的機(jī)會(huì)讓我們對(duì)已有的功能做改變或添加。這些變化如果能在一個(gè)地方實(shí)施并且記錄在案,從長(zhǎng)遠(yuǎn)來(lái)看非常有意義。

測(cè)試數(shù)據(jù)準(zhǔn)備的工作流

我們的工作流迄今為止可能仍然是構(gòu)建板塊的形式,但讓我們給自己的編碼一個(gè)測(cè)試。

  

  

我們的代碼正在按我們希望的方式工作,讓我們做一些簡(jiǎn)單的房屋清理工作。一旦開(kāi)始滾動(dòng),我們將為我們的編碼提供一個(gè)更全面的組織結(jié)構(gòu),但是現(xiàn)在我們需要把所有這些功能加到一個(gè)單獨(dú)的文件中,并保存成為dataset.py的格式。這會(huì)讓我們以后的使用更方便,下次我們會(huì)學(xué)到。

未來(lái)計(jì)劃

之后我們會(huì)學(xué)習(xí)簡(jiǎn)單的分類算法,k最近鄰算法。我們會(huì)學(xué)習(xí)如何在簡(jiǎn)單的工作流中構(gòu)建分類和聚類模型。毫無(wú)疑問(wèn),這需要編寫(xiě)一些限額外的工具來(lái)幫助我們完成項(xiàng)目,并且我確定我們還將對(duì)已經(jīng)做完的部分進(jìn)行修改。

練習(xí)機(jī)器學(xué)習(xí)就是理解機(jī)器學(xué)習(xí)的最好方法。運(yùn)用我們的工作流中需要的算法和支持工具最終會(huì)被證明是有用的。

轉(zhuǎn)載于:https://www.cnblogs.com/qwangxiao/p/7066253.html

總結(jié)

以上是生活随笔為你收集整理的机器学习工作流程第一步:如何用Python做数据准备?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。