機器學習的工作原理-代碼示例
訓練模型以預測誰能幸存下來。

[注意:請使用我們的完全交互式筆記本在此處自行構建模型。 無需任何編碼經驗。]
如果您像我,則需要玩一些東西然后"自己動手"才能真正理解它。 在這里,我們將舉例說明機器學習的真正原理。
您將建立自己的機器學習模型,以預測乘客在泰坦尼克號上幸存的可能性。 該模型僅通過查看數據即可自行學習模式。
了解進行機器學習的步驟
遵循以下步驟:
- 加載數據并進行可視化探索;
- 為機器學習算法準備數據;
- 訓練模型-讓算法從數據中學習;
- 評估模型-查看它在從未見過的數據上的表現如何;
- 分析模型-查看需要多少數據才能正常運行。
要自己構建機器學習模型,請打開配套筆記本。 您將無需任何設置即可運行真實的機器學習代碼-它可以正常工作。
了解機器學習工具
關于機器學習工具,有很多選擇。 在本指南中,我們使用一些最受歡迎和功能最強大的機器學習庫,即:
- Python:一種高級編程語言,以其易讀性著稱,是全球最受歡迎的機器學習語言。
- Pandas:Python庫,將類似電子表格的功能引入該語言。
- Seaborn:一個用于繪制圖表和其他圖形的庫。
- Scikit學習:Python的機器學習庫,提供用于預測數據分析的簡單工具。
- DRLearn:為此數據集構建的我們自己的DataRevenue Learn模塊。
這些都是很好的工具,因為它們既適用于初學者,也適用于大型公司(如摩根大通)。
探索我們的數據集
我們將使用著名的"泰坦尼克號"數據集-稍有病態但引人入勝的數據集,其中包含泰坦尼克號上乘客的詳細信息。 我們為每位乘客提供了大量數據,包括:
- 名稱,
- 性別,
- 年齡,
- 機票艙位。
我們的數據采用行和列的標準形式,其中每一行代表一位乘客,每一列代表該乘客的屬性。 這是一個示例:
- import pandas as pd
- from DRLearn import DRLearn
- titanic_dataset = pd.read_csv("titanic.csv", index_col=0)
- titanic_dataset.head()

> A few of the passengers that are in the titanic dataset. Source: Author
泰坦尼克號數據集中的一些乘客
可視化我們的數據集
機器學習模型很聰明,但是只能與我們提供給他們的數據一樣聰明。 因此,重要的第一步是深入了解我們的數據集。
在分析數據時,一個很好的起點是檢驗假設。 持有頭等艙機票的人更有可能生存,所以讓我們看看數據是否支持這一點。
您可以在配套筆記本中查看并運行代碼以產生這種可視化效果。
- DRLearn.plot_passenger_class(titanic_dataset)

> 3rd class passengers had the worst survival rate, and 1st class passengers the best. Source: Autho
三等艙乘客的生存率最差,一等艙乘客的生存率最高。
頭等艙中超過60%的人幸存,而三等艙中只有不到30%的人幸存。
您可能還聽說過"婦女和兒童優先"一詞。 讓我們看一下性別與生存率之間的相互作用。
- DRLearn.plot_passenger_gender(titanic_dataset)

> Women were much more likely to survive than men. Source: Author
女人比男人更有可能生存。
同樣,我們看到我們的假設是正確的。 超過70%的女性得以幸存,而只有大約20%的男性得以幸存。
就像這樣,我們為數據集創建了兩個基本的可視化。 我們可以在這里做更多的事情(對于生產機器學習項目,我們當然可以這樣做)。 例如,多變量分析將顯示當我們一次查看多個變量時會發生什么。
準備數據
在將數據輸入到機器學習算法以訓練模型之前,我們需要使其對我們的算法更有意義。 我們可以通過忽略某些列并重新格式化其他列來做到這一點。
忽略無用的列
我們已經知道,旅客的機票號碼與他們的生存機會之間沒有任何關聯,因此我們可以顯式忽略該列。 我們先刪除它,然后再將數據輸入模型。
重新格式化我們的數據
一些功能很有用,但不是原始形式。 例如,標簽" male"(男性)和" female"(女性)對人類有意義,但對喜歡數字的機器沒有意義。 因此,我們可以將這些標記分別編碼為" 0"和" 1"。
selected_features, target = DRLearn.extract_features(titanic_dataset)selected_features.sample(5)
一旦準備好數據集,該格式將對機器更友好。 我們在下面提供了一個示例:我們消除了許多無用的列,而剩下的所有列都使用數字。

> After preparing the dataset it's simpler and now ready for machine learning. Source: Author
準備完數據集后,它變得更簡單了,現在可以進行機器學習了。
將數據集一分為二
現在我們需要訓練我們的模型,然后對其進行測試。 就像給小學生提供測試題作為家庭作業的示例,然后給出考試條件下看不見的問題一樣,我們將在一些數據上訓練機器學習算法,然后查看其在其余數據上的表現如何。

> We split our dataset: One part for training the model, and one part for testing it. Source: Author
我們拆分了數據集:一部分用于訓練模型,另一部分用于測試模型。
- X_train, X_test, y_train, y_test = DRLearn.split_dataset(selected_features, target, split=0.2)
讓我們訓練模型!
現在開始有趣的部分! 我們會將訓練數據輸入模型中,并要求其查找模式。 在這一步中,我們為模型提供數據和所需的答案(無論乘客是否幸存)。
該模型從該數據中學習模式。

> Our machine learning model is trained on the Training set. Source: Author
我們的機器學習模型在訓練集中進行訓練。
- model = DRLearn.train_model(X_train, y_train)
測試我們的模型
現在,我們可以通過僅在數據集另一半中提供乘客的詳細信息來測試模型,而無需給出答案。 該算法不知道這些乘客是否幸免于難,但是它將嘗試根據從訓練中學到的知識進行猜測。

> Testing how well our machine learning model works by asking it to predict the results on the test
通過要求我們的機器學習模型預測測試數據的結果來測試其性能如何。
- DRLearn.evaluate_model(model, X_test, y_test)
分析我們的模型
為了更好地了解我們的模型如何工作,我們可以:
- 看看它最依賴哪些功能進行預測;
- 看看如果我們使用更少的數據,其準確性將如何變化。
第一個可以幫助我們更好地了解我們的數據,第二個可以幫助我們了解是否值得嘗試獲取更大的數據集。
了解我們的模型發現的重要內容
機器學習知道并非所有數據都同樣有趣。 通過對特定細節進行加權,可以做出更好的預測。 下面的權重表明,性別是迄今為止預測生存率的最重要因素。
- DRLearn.explain_model(model, X_train)

> Our model relies mostly on gender, a bit on whether the passenger was in 3rd class or not and on t
我們的模型主要取決于性別,有點取決于乘客是否屬于三等艙以及其家庭人數。
我們還可以查看算法在預測特定乘客的生存時注意哪些數據方面。 下面我們看到一個算法認為很可能幸存的乘客。 它特別注意以下事實:
- 乘客不在三等艙;
- 乘客是女性。
由于該乘客也不屬于頭等艙,因此略微降低了生存的機會,因此最終生存預測為93%。
- model_interpretation = DRLearn.interpret_model(model, X_test, y_test)
- passenger_number = 3
- DRLearn.analyze_passenger_prediction(model_interpretation, X_test, passenger_number)

> How the model made a prediction for one particular passenger. She had a high survival rate because
該模型如何為一名特定乘客做出預測。 她的成年率很高,因為她是女性而不是三等班。
了解數據量如何影響我們的模型
讓我們對模型進行多次訓練,看看隨著數據量的增加它可以改善多少。 在這里,我們同時繪制了訓練得分和測試得分。 后者更有趣,因為它告訴我們模型在看不見的數據上的表現如何。
訓練得分可以被認為是"公開考試":該模型已經看到了答案,因此看起來比"測試得分"要高,但是該模型更容易對在測試過程中看到的數據表現良好 訓練階段。
- DRLearn.visualise_training_progress(model, X_train, y_train, X_test, y_test)

> More data makes our model better (test score). But after ~500 data points the improvement is minim
更多數據使我們的模型更好(測試分數)。 但是,在大約500個數據點之后,改進很小。
在這里,我們看到模型擁有的數據越多,其性能就越好。 在開始時這會更加明顯,然后添加更多數據只會帶來很小的改進。
機器學習模型不必是"黑匣子"算法。 模型分析可幫助我們了解它們如何工作以及如何改進它們。
結論
就是這樣-您已經建立了自己的機器學習模型。 現在,您將能夠:
- 了解數據科學團隊的日常工作;
- 與您的數據科學或機器學習團隊更好地溝通;
- 了解機器學習最能解決哪些問題;
- 意識到機器學習畢竟不是那么令人生畏。
機器學習的復雜部分涉及構建和擴展定制解決方案的所有細節。 這正是我們的專長。因此,如果您需要后續步驟的幫助,請告訴我們。