簡短的介紹詞
我相信,如果我們能得到一步一步的指示來告訴我們該做什麼以及如何做,我們可以做更多的事情。我自己也記得我一生中無法開始某件事的時刻,因為很難理解從哪裡開始。也許,曾經在網路上看到「數據科學」這個詞,並認為你離這個詞還很遠,而做這件事的人就在另一個世界的某個地方。不,他們就在這裡。也許,多虧了這個領域的人們,一篇文章出現在你的動態上。有很多課程可以幫助您習慣這門手藝,但在這裡我將幫助您踏出第一步。
那麼,你準備好了嗎?我馬上告訴你,你需要了解 Python 3,因為我將在這裡使用它。我還建議你提前在 Jupyter Notebook 上安裝它或看看如何使用 google colab。
第一步
Kaggle 是您在這方面的重要助手。原則上,你可以不使用它,但我將在另一篇文章中討論這一點。這是一個舉辦數據科學競賽的平台。在每次這樣的比賽中,在早期階段你都會獲得超乎現實的解決各種問題的經驗、開發經驗和團隊合作經驗,這在我們這個時代非常重要。
我們將從那裡開始我們的任務。它的名字叫做「泰坦尼克號」。條件是這樣的:預測每個人是否能夠生存。一般來說,參與DS的人的任務是收集資料、處理資料、訓練模型、預測等等。在kaggle中,我們可以跳過資料收集階段——它們呈現在平台上。我們需要下載它們然後就可以開始了!
您可以按如下方式執行此操作:
資料選項卡包含包含資料的文件
我們下載了數據,準備了 Jupyter 筆記本並...
第二步
我們現在如何載入這些數據?
首先,讓我們導入必要的函式庫:
import pandas as pd
import numpy as np
Pandas 將允許我們下載 .csv 檔案以進行進一步處理。
需要 Numpy 將我們的數據表表示為帶有數字的矩陣。
前進。讓我們將檔案 train.csv 上傳給我們:
dataset = pd.read_csv('train.csv')
我們將透過 dataset 變數引用我們的 train.csv 資料選擇。讓我們看看那裡有什麼:
dataset.head()
head() 函數允許我們查看資料幀的前幾行。
倖存的列正是我們的結果,在此資料框中已知。對於任務問題,我們需要預測 test.csv 資料的 Survived 欄位。這些數據儲存了泰坦尼克號其他乘客的信息,而我們在解決問題時並不知道結果。
因此,讓我們將表格分為相關數據和獨立數據。這裡一切都很簡單。相關數據是依賴結果中的獨立數據的數據。獨立數據是影響結果的數據。
例如,我們有以下資料集:
「Vova 教授電腦科學——不。
Vova 在計算機科學方面獲得了 2 分。”
電腦科學的成績取決於以下問題的答案:Vova 學過電腦科學嗎?清楚嗎?繼續前進吧,我們已經離目標更近了!
自變數的傳統變數是 X。因變數的變數是 y。
我們執行以下操作:
X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]
這是什麼?透過函數 iloc[:, 2: ],我們告訴 Python:我想在變數 X 中查看從第二列開始的資料(包括從零開始計數的資料)。在第二行中,我們說我們想要查看第一列中的資料。
[ a:b, c:d ] 是我們在括號中所使用的結構。如果您不指定任何變量,它們將被保存為預設值。也就是說,我們可以指定 [:,:d],然後我們將取得資料框中的所有列,除了從數字 d 開始的列。變數 a 和 b 定義字串,但我們需要它們全部,所以我們將其保留為預設值。讓我們看看我們得到了什麼:
X.head()
y.head()
為了簡化這個小教訓,我們將刪除需要特別小心或根本不影響生存能力的欄位。它們包含 str 類型的資料。
count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)
極好的!讓我們繼續下一步。
第三步
這裡我們需要對資料進行編碼,以便機器能更好地理解這些資料如何影響結果。但我們不會對所有內容進行編碼,而只會對我們留下的 str 資料進行編碼。欄位“性別”。我們想要如何編碼?讓我們將有關一個人的性別的數據表示為向量:10 - 男性,01 - 女性。
首先,讓我們將表轉換為 NumPy 矩陣:
X = np.array(X)
y = np.array(y)
現在讓我們來看看:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
remainder='passthrough')
X = np.array(ct.fit_transform(X))
sklearn 庫是一個很酷的函式庫,它允許我們完成資料科學的完整工作。它包含大量有趣的機器學習模型,也允許我們進行資料準備。
正如我們所描述的,OneHotEncoder 將允許我們在該表示中編碼一個人的性別。將創建 2 個班級:男、女。如果此人是男性,則在「男性」欄中寫入 1,在「女性」欄中寫入 0。
OneHotEncoder() 之後有 [1] - 這意味著我們要對第 1 列(從零開始計數)進行編碼。
極好的。讓我們更進一步吧!
通常,某些數據會留空(即 NaN - 不是數字)。例如,有關於一個人的信息:他的名字、性別。但沒有關於他年齡的資訊。在這種情況下,我們將應用以下方法:我們將找到所有列的算術平均值,如果列中缺少某些數據,那麼我們將用算術平均值填入空白。
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)
現在讓我們考慮一下當資料非常大時會發生的情況。有些數據在[0:1]區間內,而有些數據可能會超過數百、數千。為了消除這種分散並使計算機的計算更加準確,我們將掃描資料並對其進行縮放。讓所有數字不超過三。為此,我們將使用 StandardScaler 函數。
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])
現在我們的數據如下所示:
班級。我們已經接近我們的目標了!
第四步
讓我們訓練我們的第一個模型!從sklearn庫中我們可以找到大量有趣的東西。我將梯度提升分類器模型應用於這個問題。我們使用分類器是因為我們的任務是分類任務。預後應指定為 1(存活)或 0(未存活)。
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)
fit 函數告訴 Python:讓模型尋找 X 和 y 之間的依賴關係。
不到一秒鐘,模型就準備好了。
如何應用?我們現在就來看看吧!
第五步。結論
現在我們需要載入一個包含我們需要進行預測的測試資料的表。透過這個表,我們將執行與 X 相同的所有操作。
X_test = pd.read_csv('test.csv', index_col=0)
count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(count, inplace=True, axis=1)
X_test = np.array(X_test)
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])
現在讓我們來應用我們的模型!
gbc_predict = gbc.predict(X_test)
全部。我們做了一個預測。現在需要將其記錄為csv並傳送到網站。
np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')
準備好。我們收到了一份包含對每位乘客的預測的文件。剩下的就是將這些解決方案上傳到網站並獲得預測評估。這樣一個原始的解決方案不僅給了公眾74%的正確答案,而且對數據科學也有一定的推動作用。好奇的可以隨時私訊給我提問。謝謝大家!
來源: www.habr.com