大數(shù)據(jù)分析培訓(xùn)課程機器學(xué)習(xí)這份簡單易懂的指南對開始進行項目所需的所有機器學(xué)習(xí)先決條件進行了結(jié)構(gòu)化概述,包括從導(dǎo)入和清除數(shù)據(jù)到建模和生產(chǎn)的完整數(shù)據(jù)管道。
我們都從考慮數(shù)據(jù)集或目標入手。一旦我們發(fā)現(xiàn),收集或刮我們的數(shù)據(jù),我們將其拉起,并見證了壓倒性的視線號碼,更多號碼,類別,也許有些話無情的細胞!幼稚的想法擺在我們的腦海中,利用我們的機器學(xué)習(xí)能力來處理這種糾結(jié)的混亂……但是快速搜索顯示了在訓(xùn)練模型之前我們需要考慮的許多任務(wù) !
一旦克服了不守規(guī)矩的數(shù)據(jù)帶來的沖擊,我們就會尋找與強大的克星戰(zhàn)斗的方式。我們首先嘗試將數(shù)據(jù)導(dǎo)入Python。它在紙上比較簡單,但是過程可能會稍有復(fù)雜。盡管如此,我們只需要付出一點努力。
不浪費時間,我們就開始進行數(shù)據(jù)清理,以消除虛假信息并暴露出美麗的事物。我們的方法從簡單開始-觀察并刪除。它工作了好幾次,但后來我們意識到...它確實不能使我們伸張正義!但是,為了處理混亂,我們找到了一個強大的工具可以添加到我們的武器庫中:圖表!使用我們的圖形,我們可以了解我們的數(shù)據(jù),其中的模式以及缺少的地方。我們可以插值 (填寫)或刪除丟失的數(shù)據(jù)。
最后,我們應(yīng)對我們高度期待的挑戰(zhàn),即數(shù)據(jù)建模!通過少量研究,我們發(fā)現(xiàn)了常用的策略和模型。破譯我們應(yīng)該使用哪一個有點困難,但是我們?nèi)匀辉O(shè)法弄清楚并弄清楚了所有這些!
但是,如果不做一些令人印象深刻的事情,我們就無法完成一個項目。因此最終產(chǎn)品網(wǎng)站應(yīng)用程序甚至報告將使我們走得更遠!我們知道第一印象很重要,因此我們修復(fù)了GitHub存儲庫,并確保對所有內(nèi)容進行了充分的記錄和解釋。現(xiàn)在,我們終于可以向全世界展示我們的辛勤工作!
第1章-導(dǎo)入數(shù)據(jù)
數(shù)據(jù)具有各種形狀和大小,因此我們用于將所有內(nèi)容轉(zhuǎn)換為代碼的過程通常會有所不同。
數(shù)據(jù)清理的難點不是編碼或理論,而是我們的準備!當我們第一次開始一個新項目并下載我們的數(shù)據(jù)集時,可能很想打開代碼編輯器并開始輸入...但這對我們沒有任何好處。如果要搶先一步,我們需要為數(shù)據(jù)的最佳和最差部分做好準備。為此,我們需要通過手動檢查電子表格來開始基本操作。一旦了解了數(shù)據(jù)的基本格式(文件類型以及所有特殊性),我們就可以將其全部放入Python中。
當我們很幸運并且只有一個電子表格時,我們可以使用Pandas的 read_csv 函數(shù)(讓它知道我們的數(shù)據(jù)在哪里):
pd.read_csv(“ file_path.csv”)
實際上,我們遇到了更復(fù)雜的情況,因此請注意:
a)該文件以不需要的信息開頭(我們需要跳過)
b)我們只想導(dǎo)入幾列
c)我們想重命名我們的專欄
d)數(shù)據(jù)包括日期
e)我們希望將來自多個來源的數(shù)據(jù)合并到一個地方
f)數(shù)據(jù)可以分組在一起
盡管我們正在討論各種場景,但是通常一次只能處理幾個場景。
我們的前幾個問題(導(dǎo)入數(shù)據(jù)/重命名列的特定部分)很容易使用一些參數(shù)來處理,例如要跳過的行數(shù),要導(dǎo)入的特定列以及我們的列名:
pd.read_csv(“ file_path.csv”,skiprows = 5,usecols = [0,1],名稱= [“ Column1”,“ Column2”])
每當我們的數(shù)據(jù)分散在多個文件中時,我們都可以使用Pandas concat 函數(shù)將它們合并 。該 CONCAT 函數(shù)組合的清單 數(shù)據(jù)框的一起:
my_spreadsheets = [pd.read_csv(“ first_spreadsheet.csv”),pd.read_csv(“ second_spreadsheet.csv”))]
pd.concat(my_spreadsheets,ignore_index = True)
我們解析以 合并 一個電子表格列表(就像以前一樣導(dǎo)入)。當然,可以以任何方式獲得列表(因此,花哨的列表理解或每個文件的臨時列表也同樣適用),但請記住, 我們需要數(shù)據(jù)幀,而不是文件名/路徑!
如果沒有CSV文件,Pandas仍然可以使用!我們可以只 換出 read_csv 為 read_excel, read_sql或其他 選項。
在所有數(shù)據(jù)都位于Pandas數(shù)據(jù)框中之后,我們需要仔細檢查數(shù)據(jù)的格式是否正確。實際上,這意味著檢查每個系列數(shù)據(jù)類型并確保它們不是通用對象。我們這樣做是為了確保我們可以將Pandas內(nèi)置功能用于數(shù)字,分類和日期/時間值。為此,只需運行 DataFrame.dtypes即可。如果輸出看起來合理(即數(shù)字是數(shù)字,類別是類別等),那么我們應(yīng)該繼續(xù)進行。但是,通常情況并非如此,因為我們需要更改數(shù)據(jù)類型!這可以通過Pandas DataFrame.astype完成 。如果這不起作用,則應(yīng)為該特定轉(zhuǎn)換提供另一個Pandas函數(shù):
data [“ Rating”] = data [“ Rating”]。as_type(“ category”)
data [“ Number”] = pd.to_numeric(data [“ Number”])
data [“ Date”] = pd.to_datetime(data [“ Date”])
data [“ Date”] = pd.to_datetime(data [[“ Year”,“ Month”,“ Day”,“ Hour”,“ Minute”]])
如果我們需要分析單獨的數(shù)據(jù)組(即,也許我們的數(shù)據(jù)按國家劃分),則可以使用Pandas groupby。我們可以使用 groupby 選擇特定的數(shù)據(jù),并分別在每個組上運行函數(shù):
data.groupby(“ Country”)。get_group(“ Australia”)
data.groupby(“ Country”)。mean()
其他更利基的技巧,例如多/層次索引,在特定情況下也可能有所幫助,但在理解和使用方面則更加棘手。
第2章-數(shù)據(jù)清理
數(shù)據(jù)是有用的,數(shù)據(jù)是必要的。但是,它 必須干凈而且要點!如果我們的數(shù)據(jù)無處不在,那么它對我們的機器學(xué)習(xí)模型將毫無用處。
每個人都會因缺少數(shù)據(jù)而發(fā)瘋,但是隧道盡頭總是一片曙光。
進行數(shù)據(jù)清理的最簡單,最快的方法是問自己:
數(shù)據(jù)中的哪些功能會影響最終目標?
最終目標是指我們要進行預(yù)測,分類或分析的任何變量。這樣做的目的是縮小我們的范圍,而不會陷入無用信息的泥潭。
一旦知道了我們的主要目標特征是什么,我們就可以嘗試查找模式,關(guān)系,丟失的數(shù)據(jù)等等。繪制圖形的一種簡單直觀的方法!快速使用Pandas繪制數(shù)據(jù)集中的每個變量,然后嘗試查看所有內(nèi)容適合的位置。
一旦我們確定了數(shù)據(jù)中潛在的問題或趨勢,就可以嘗試對其進行修復(fù)。通常,我們有以下選擇:
a)刪除缺失的條目
b)刪除整列數(shù)據(jù)
c)填寫缺失的數(shù)據(jù)條目
d)重新采樣數(shù)據(jù)(即更改分辨率)
e)收集更多信息
為了從識別丟失的數(shù)據(jù)轉(zhuǎn)變?yōu)檫x擇處理數(shù)據(jù)的方式,我們需要考慮它如何影響最終目標。有了缺失的數(shù)據(jù),我們會刪除所有對最終結(jié)果似乎沒有重大影響的東西(即,我們無法找到有意義的模式),或者似乎 缺少太多東西無法獲得價值的東西。有時,我們也決定刪除少量丟失的數(shù)據(jù)(因為比填充數(shù)據(jù)更容易)。
如果我們決定擺脫信息, 則可以使用Pandas DataFrame.drop。它從數(shù)據(jù)框中刪除列或行。它很容易使用,但是請記住, 熊貓默認情況下不會從源數(shù)據(jù)框中修改/刪除數(shù)據(jù),因此 必須指定inplace = True。可能需要注意的是, axis 參數(shù)指定要刪除的是行還是列。
當不刪除整列,或者特別針對丟失的數(shù)據(jù)時,依賴一些漂亮的Pandas函數(shù)通常會很有用。為了刪除空值,可以使用DataFrame.dropna 。請記住,盡管默認情況下 dropna會 完全刪除所有缺失的值。然而,參數(shù)設(shè)置或者 如何 給 所有 或設(shè)定閾值(脫粒,代表許多空值是如何要求它刪除)可以彌補這一點。
如果我們有少量不規(guī)則的缺失值,則可以用幾種方法填充它們。最簡單的是 DataFrame.fillna ,它將缺少的值設(shè)置為某個預(yù)設(shè)值。更為復(fù)雜但靈活的選項是使用DataFrame.interpolate進行插值 。插值基本上允許任何人只需設(shè)置 方法 ,他們想更換每個空值。這些包括上一個/下一個值,線性和時間(根據(jù)數(shù)據(jù)推斷出最后兩個)。無論何時,只要有時間,時間就是自然的選擇,否則,請根據(jù)要插值的數(shù)據(jù)量和復(fù)雜程度做出合理的選擇。
data [“ Column”]。fillna(0,inplace = True)
data [[“ Column”]] = data [[“ Column”]]。interpolate(method =“ linear”)
如上所示,需要在純粹包含缺少數(shù)據(jù)的列的數(shù)據(jù)幀中傳遞插值 (否則將引發(fā)錯誤)。
每當我們看到定期丟失的數(shù)據(jù)或使用不同時標的多個數(shù)據(jù)源時(例如確??梢越M合分鐘和小時的測量結(jié)果),重采樣就很有用。直觀地理解重采樣可能會有點困難,但是當您在特定時間范圍內(nèi)平均測量值時,這是必不可少的。例如,我們可以通過指定要獲取每個月值的平均值來獲取月值:
data.resample(“ M”)。mean()
“ M”代表月份,可以用“ Y”代替年份和其他選項。
盡管數(shù)據(jù)清理過程可能具有很大的挑戰(zhàn)性,但是如果我們記住我們的初衷,它將變成更加邏輯和直接的任務(wù)!如果我們?nèi)匀粵]有所需的數(shù)據(jù),則可能需要回到第一階段并收集更多數(shù)據(jù)。 請注意,缺少數(shù)據(jù)表示數(shù)據(jù)收集存在問題,因此仔細考慮并記錄發(fā)生的位置非常有用。
為了完成操作,Pandas的 unique 和 value_counts 函數(shù)可用于確定要直接刪除的功能以及進一步繪制和研究的功能。
第3章-可視化
可視化聽起來很簡單,確實如此,但是很難... 不過于復(fù)雜。對于我們而言,將地塊視為創(chuàng)建瑣事實在太容易了。但是,這些壞孩子做得非常好-直觀地展示了我們數(shù)據(jù)的內(nèi)部運作方式!只記得:
我們對數(shù)據(jù)進行圖形化處理,以查找并解釋一切工作原理。
因此,當您遇到想法或不確定要做什么時,我們基本上總是可以退回到 識別有用的模式和有意義的關(guān)系上。這似乎有些無聊,但確實很有用。
我們的目標不是繪制精美的六邊形圖,而是描繪正在發(fā)生的事情,因此 絕對任何人都 可以簡單地解釋一個復(fù)雜的系統(tǒng)!
不可否認的是,一些技術(shù)有用:
a)數(shù)據(jù)過多時重新采樣
b)當?shù)貕K比例不同時的輔助軸
c)當我們的數(shù)據(jù)可以分類時進行分組
d)要開始繪制圖形,只需 在任何系列或數(shù)據(jù)幀上使用Pandas .plot()!當我們需要更多時,我們可以深入研究MatPlotLib,Seaborn或交互式繪圖庫。
data.plot(x =“列1名稱”,y =“列2名稱”,kind =“欄”,figsize =(10,10))
data.plot(x =“列1名稱”,y =“列3名稱”,secondary_y = True)
data.hist()
data.groupby(“ group”)。boxplot()
在90%的時間里,此基本功能就足夠了(此處提供更多信息),而如果沒有,搜索應(yīng)該揭示如何 繪制特別奇異的圖。
第4章-建模
4.1)簡要概述
現(xiàn)在終于到了有趣的東西-產(chǎn)生結(jié)果。訓(xùn)練scikit學(xué)習(xí)模型似乎 很簡單,但是沒有人詳細介紹!因此,說實話,并非每個數(shù)據(jù)集和模型都不相等。
我們的建模方法會根據(jù)我們的數(shù)據(jù)而大相徑庭。有三個特別重要的因素:
a)問題類型
b)量數(shù)據(jù)
c)數(shù)據(jù)復(fù)雜度
問題的類型歸結(jié)為我們是要預(yù)測類/標簽(稱為 分類),值(稱為 回歸)還是對數(shù)據(jù)進行分組(稱為 聚類)。如果我們試圖在已經(jīng)有我們要預(yù)測的示例的數(shù)據(jù)集上訓(xùn)練模型,那么我們將模型稱為監(jiān)督的,如果不是,則稱其為 無監(jiān)督的??捎脭?shù)據(jù)量及其復(fù)雜程度預(yù)示了模型將足夠簡單。 具有更多功能(即列)的數(shù)據(jù)往往更復(fù)雜。
解釋復(fù)雜性的關(guān)鍵是要了解哪些模型 對我們的數(shù)據(jù)而言太好或太壞。
模特 的合身度可為 我們提供這一信息!如果模型難以解釋我們的數(shù)據(jù)(過于簡單),我們可以說它 不合適,而如果模型完全過大(過于復(fù)雜),我們就說它 過度適合。我們可以將其視為從什么都不學(xué)到記憶一切的頻譜。我們需要保持平衡,以確保我們的模型 能夠?qū)?我們的結(jié)論歸納 為新信息。這通常稱為偏差方差折衷。 請注意,復(fù)雜度也會影響模型的可解釋性。
復(fù)雜的模型需要花費大量的時間進行訓(xùn)練,尤其是對于大型數(shù)據(jù)集。因此,升級該計算機,隔夜運行模型,然后放松一會兒!
制備
4.2)拆分數(shù)據(jù)
在訓(xùn)練模型之前,請務(wù)必注意,我們將需要一些數(shù)據(jù)集對其進行測試(因此我們知道其性能如何)。因此,我們經(jīng)常將數(shù)據(jù)集劃分為 單獨的訓(xùn)練和測試集。這使我們能夠測試模型對通用的新數(shù)據(jù)的泛化程度。這通常是可行的,因為我們知道我們的數(shù)據(jù)可以很好地代表現(xiàn)實世界。
實際的測試數(shù)據(jù)量并不重要,但是經(jīng)常使用80%的訓(xùn)練和20%的測試。
在帶有Scikit的Python中,學(xué)習(xí) train_test_split 函數(shù)可以做到這一點:
train_data,test_data = train_test_split(數(shù)據(jù))
train_data,test_data = train_test_split(數(shù)據(jù))
交叉驗證是將數(shù)據(jù)集分為多個折疊(即原始數(shù)據(jù)集的子集或部分)的地方。 與使用單個測試/驗證集相比,這往往更健壯并能 抵抗過度擬合!幾個scikit-learn函數(shù)可幫助進行 交叉驗證。但是,通常是直接通過網(wǎng)格或隨機搜索(如下所述)完成的。
cross_val_score(模型,輸入數(shù)據(jù),輸出數(shù)據(jù),cv = 5)
cross_val_score(模型,輸入數(shù)據(jù),輸出數(shù)據(jù),cv = 5)
4.3)超參數(shù)調(diào)整
我們的模型無法解釋某些因素,因此我們 設(shè)置了某些超參數(shù)。這些模型的模型各不相同,但我們可以通過人工試驗和錯誤,也可以通過諸如網(wǎng)格或隨機搜索之類的簡單算法找到最佳值。使用網(wǎng)格搜索,我們嘗試所有可能的值(蠻力),并通過某種分布/選擇來隨機搜索隨機值。兩種方法通常都使用交叉驗證。
scikit-learn中的網(wǎng)格搜索通過參數(shù) 字典進行。每個輸入鍵代表要調(diào)整的超參數(shù),值(列表或元組)是要選擇的值的選擇:
參數(shù)= {'內(nèi)核':('線性','rbf'),'C':[1,10]}
型號= = SVC()
網(wǎng)格= GridSearchCV(模型,param_grid =參數(shù))
創(chuàng)建網(wǎng)格后,可以使用它來訓(xùn)練模型并提取分數(shù):
grid.fit(train_input,train_output)
best_score,best_depth = grid.best_score_,grid.best_params_
這里重要的是要記住,我們需要進行 培訓(xùn)而不是測試數(shù)據(jù)。即使使用交叉驗證來測試模型,我們最終還是要盡力使訓(xùn)練數(shù)據(jù)最合適,并且隨后將繼續(xù)在測試集上測試每個模型:
test_predictions = grid.predict(test_input)
在scikit-learn中,隨機搜索的工作原理類似,但由于我們需要知道每個超參數(shù)采用哪種分布類型而變得稍微復(fù)雜一些。盡管從理論上講,它可以更快地產(chǎn)生相同或更好的結(jié)果,但這種情況因情況而異。 為了簡單起見,最好堅持使用網(wǎng)格搜索。
4.4)型號選擇
4.4.1)使用模型
使用scikit-learn,就像找到我們所需的模型名稱然后為它創(chuàng)建變量一樣簡單。檢查文檔的鏈接以獲取更多詳細信息!例如
support_vector_regressor = SVR()
4.4.2)基本選擇
線性/邏輯回歸
線性回歸 試圖將 一條直線擬合 到我們的數(shù)據(jù)。這是最基本和最基本的模型。線性回歸有多種變體,例如套索和嶺回歸(這是防止過度擬合的正則化方法)。多項式回歸可用于擬合更高階的曲線(如拋物線和其他曲線)。Logistic回歸是可用于分類的另一個變體。
支持向量機
就像線性/邏輯回歸一樣, 支持向量機(SVM) 嘗試將直線或曲線擬合到數(shù)據(jù)點。但是,使用SVM的目的是最大化邊界和每個點之間的距離(而不是使線/曲線穿過每個點)。
支持向量機的主要優(yōu)點是它們使用不同內(nèi)核的能力 。內(nèi)核是一種計算相似度的函數(shù)。這些內(nèi)核允許線性和非線性數(shù)據(jù),同時保持相當高的效率。內(nèi)核將輸入映射到更高維的空間,因此出現(xiàn)邊界。對于大量功能,此過程通常不可行。神經(jīng)網(wǎng)絡(luò)或其他模型將可能是更好的選擇!
神經(jīng)網(wǎng)絡(luò)
所有的嗡嗡聲總是與深度學(xué)習(xí)和 神經(jīng)網(wǎng)絡(luò)有關(guān)。它們是復(fù)雜,緩慢且資源密集的模型,可用于復(fù)雜數(shù)據(jù)。但是,當遇到大型非結(jié)構(gòu)化數(shù)據(jù)集時,它們非常有用。
使用神經(jīng)網(wǎng)絡(luò)時,請確保當心過度安裝。一種簡單的方法是通過跟蹤誤差隨時間的變化(稱為學(xué)習(xí)曲線)。
深度學(xué)習(xí)是一個極其豐富的領(lǐng)域,因此這里有太多要討論的內(nèi)容。實際上,scikit-learn是一個機器學(xué)習(xí)庫,幾乎沒有深度學(xué)習(xí)能力(與PyTorch 或 TensorFlow相比 )。
決策樹
決策樹 是建立關(guān)系模型的簡單快捷方法。從根本上講,它們是 決策樹 ,有助于確定數(shù)據(jù)點所屬的類或標簽。決策樹也可以用于回歸問題。盡管很簡單,但是為了避免過度擬合,必須選擇幾個超參數(shù)。通常,所有這些都與樹的深度和要做出的決策數(shù)量有關(guān)。
K均值
我們可以 使用 k-means將未標記的數(shù)據(jù)分組為幾個群集。通常,存在的簇數(shù)是選擇的超參數(shù)。
K-means通過嘗試優(yōu)化(減少)稱為慣性的某些標準(即函數(shù))而起作用??梢哉J為是試圖最小化一組 質(zhì)心到 每個數(shù)據(jù)點的距離。
4.5)合奏
隨機森林
隨機森林是在數(shù)據(jù)的隨機子集上訓(xùn)練的多個決策樹的組合(引導(dǎo))。此過程稱為裝袋,可讓隨機森林對復(fù)雜數(shù)據(jù)獲得良好的擬合度(低偏差和低方差)。
其背后的理由可以比作民主。
對于 回歸 問題,我們對每個決策樹的輸出求平均,對于分類,我們選擇最受歡迎的決策樹 。這可能并不總是可行,但我們通常會假設(shè)會這樣做 (尤其是對于具有多列的大型數(shù)據(jù)集)。
隨機森林的另一個優(yōu)點是,微不足道的功能不應(yīng)因為類似民主的引導(dǎo)過程而對性能產(chǎn)生負面影響!
超參數(shù)選擇與決策樹的選擇相同,但決策樹的數(shù)量也是如此。由于上述原因,更多的樹木等于更少的過度擬合!
請注意,隨機森林使用隨機子集替換行和列!
4.6)梯度提升
像AdaBoost或XGBoost這樣的集成模型 通過將一個模型堆疊在另一個模型上來工作。這里的假設(shè)是,每個連續(xù)的弱學(xué)習(xí)者都將糾正前一個學(xué)習(xí)者的缺陷(因此稱為提升)。因此,模型的組合應(yīng)該提供每個模型的優(yōu)點而沒有潛在的陷阱。
迭代方法意味著先前模型的性能會影響當前模型,而更好的模型將具有更高的優(yōu)先級。增強模型的性能略好于裝袋模型(也稱為隨機森林),但過擬合的可能性也更高。scikit-learn庫為分類 和 回歸提供AdaBoost 。
第五章-生產(chǎn)
這是該過程的最后但可能是最重要的部分。我們已經(jīng)完成了所有這些工作,因此我們需要加倍努力,創(chuàng)造出令人印象深刻的東西!
有多種選擇。 Streamlit 是面向數(shù)據(jù)的網(wǎng)站的令人興奮的選擇,并且Kotlin,Swift和Dart等工具可用于Android / IOS開發(fā)。帶有VueJS之類的框架的JavaScript也可以用于提高靈活性。
在嘗試了大多數(shù)方法之后,老實說,我建議您堅持使用Streamlit,因為它比其他方法容易得多!
在這里重要的是從愿景開始(越簡單越好),然后嘗試找出哪些部分最重要。然后嘗試專門處理這些問題。繼續(xù)直到完成!對于網(wǎng)站,將需要像Heroku這樣的托管服務(wù) ,因此世界其他地方可以看到我們所有辛勤工作的驚人最終產(chǎn)品。
即使以上所有選項都不適合這種情況,但也必須包含一份報告或一篇文章,其中包括我們已完成的工作,所學(xué)的內(nèi)容以及任何建議或教訓(xùn),以及記錄良好的GitHub存儲庫! 確保自述文件是最新的。
填寫下面表單即可預(yù)約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費! 怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!
?2007-2022/ mwtacok.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc