目錄
在7天內使用Python進行數據準備。
數據準備涉及將原始數據轉換爲更適合建模的形式。
數據準備可能是預測建模項目中最重要的部分,也是最耗時的過程,儘管似乎討論得最少。 相反,重點是機器學習算法,其使用和參數化已成爲常規操作。
實際的數據準備需要了解數據清洗,特徵選擇數據轉換,降維等知識。
在本速成課程中,您將發現如何在7天內開始使用Python進行預測性建模項目,並自信地準備數據。
這是重要的職位。 您可能要爲其添加書籤。
讓我們開始吧。
機器學習的數據準備(7天微型課程)Christian Collins攝,保留部分權利。
此速成課程適用於誰?
在開始之前,請確保您在正確的位置。
本課程適用於可能瞭解一些應用機器學習的開發人員。 也許您知道如何使用流行的工具端到端地解決預測建模問題,或者至少解決了大多數主要步驟。
本課程的課程確實假設了一些有關您的事情,例如:您知道如何使用基本的Python進行編程。
您可能知道一些用於數組操作的基本NumPy。
您可能知道一些基本的scikit學習模型。
您不必是:數學奇才!
機器學習專家!
本速成課程將帶您從對機器學習有一點了解的開發人員,到可以有效地爲預測建模項目準備數據的開發人員。
注意:本速成課程假定您具有至少安裝了NumPy的Python 3 SciPy環境。 如果您需要有關環境的幫助,則可以按照此處的分步教程進行操作:如何爲Anaconda設置用於機器學習的Python環境 https://machinelearningmastery.com/setup-python-environment-machine-learning-deep-learning-anaconda/
速成課程概述本速成課程分爲七個課程。
您可以每天完成一堂課(推薦),也可以在一天之內完成所有課程(核心課程)。 這實際上取決於您有空的時間和您的熱情水平。
以下列出了七個課程,可幫助您入門並提高使用Python進行數據準備的能力:
- 第01課:數據準備的重要性;
- 第02課:用插補法填充缺失的值;
- 第03課:使用RFE選擇特徵;
- 第04課:用歸一化縮放數據 ;
- 第5課:使用熱編碼(One-Hot)將類別轉換爲;
- 第06課:通過kBins將數字轉換爲類別;
- 第07課:使用PCA進行降維;
每節課可能需要60秒鐘或最多30分鐘的時間。 花點時間按照自己的進度完成課程。 提出問題,甚至在以下評論中發佈結果。
這些課程可能會讓您開始學習如何做事。 我會給您一些提示,但是每節課的重點是迫使您學習在哪裏尋求有關Python的算法和最佳工具的幫助。 (提示:我在此博客上擁有所有答案;請使用搜索框。)在評論中發佈您的結果; 我會加油的!
堅持, 不要放棄
第1課:數據準備的重要性
在本課程中,您將發現數據準備在機器學習的預測建模中的重要性。
預測建模項目涉及從數據中學習。
數據是指來自域的表徵您要解決的問題的示例或案例。
在預測建模項目(例如分類或迴歸)上,原始數據通常無法直接使用。
出現這種情況的主要原因有四個:
- 數據類型:機器學習算法要求數據爲數字。
- 數據要求:某些機器學習算法對數據有要求。
- 數據錯誤:可能需要糾正統計噪聲和數據錯誤。
- 數據複雜性:可以從數據中挑出複雜的非線性關係。
原始數據必須先進行預處理,然後才能用於擬合和評估機器學習模型。 預測建模項目中的這一步驟稱爲“數據準備”。 在機器學習項目的數據準備步驟中,您可能會使用或探索一些常見或標準任務。
這些任務包括:
- 數據清理:識別和糾正數據中的錯誤或錯誤。
- 功能選擇:標識與任務最相關的那些輸入變量。
- 數據轉換:更改變量的規模或分佈。
- 特徵工程:從可用數據中獲取新變量。
- 降維:創建數據的緊湊投影。
這些任務中的每一個都是具有專門算法的整個研究領域。
您的任務:
在本課程中,您必須列出以前知道或可能使用過的三種數據準備算法,併爲此目的給出一個單行摘要。
數據準備算法的一個示例是數據歸一化,它將數值變量縮放到零到一之間的範圍。
在下面的評論中發佈您的答案。 我很想看看你的想法。
在下一課中,您將發現如何修復缺少值的數據,稱爲數據插補。
第2課:通過插補填充缺失值
在本課程中,您將發現如何識別和填充數據中的缺失值。
實際數據通常缺少值。
數據可能由於許多原因而缺少值,例如未記錄的觀察值和數據損壞。 處理缺失數據很重要,因爲許多機器學習算法不支持缺失值的數據。
用數據填充缺失值稱爲數據插補,數據插補的一種流行方法是計算每列的統計值(例如平均值),然後用統計量替換該列的所有缺失值。
馬絞痛數據集(https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv)描述患有絞痛的馬的醫學特徵以及它們的存活或死亡。 它缺少的值都標有問號“?”。 我們可以使用read_csv()函數加載數據集,並確保將問號值標記爲NaN。
加載後,我們可以使用SimpleImputer類轉換所有用NaN值標記的缺失值以及列的平均值。
下面列出了完整的示例。
# statistical imputation transform for the horse colic dataset
from numpy import isnan
from pandas import read_csv
from sklearn.impute import SimpleImputer
# load dataset
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'
dataframe = read_csv(url, header=None, na_values='?')
# split into input and output elements
data = dataframe.values
X, y = data[:, :-1], data[:, -1]
# print total missing
print('Missing: %d' % sum(isnan(X).flatten()))
# define imputer
imputer = SimpleImputer(strategy='mean')
# fit on the dataset
imputer.fit(X)
# transform the dataset
Xtrans = imputer.transform(X)
# print total missing
print('Missing: %d' % sum(isnan(Xtrans).flatten()))
您的任務:
對於本課,您必須運行示例並檢查數據歸因轉換前後數據集中缺失值的數量。
在下面的評論中發佈您的答案。 我很想看看你的想法。
在下一課中,您將發現如何選擇數據集中最重要的要素。
第3課:使用RFE選擇特徵
在本課程中,您將發現如何選擇數據集中最重要的要素。
特徵選擇是在開發預測模型時減少輸入變量數量的過程。
希望減少輸入變量的數量,以減少建模的計算成本,並且在某些情況下,還需要改善模型的性能。
遞歸特徵消除(Recursive Feature Elimination)或簡稱RFE是一種流行的特徵選擇算法。
RFE之所以受歡迎是因爲它易於配置和使用,並且可以有效地選擇訓練數據集中與預測目標變量更多或最相關的那些特徵(列)。
scikit-learn Python機器學習庫爲機器學習提供了RFE的實現。 RFE是一種轉變。 要使用它,首先,使用通過“ estimator”參數指定的所選算法以及通過“ n_features_to_select”參數選擇的特徵數量來配置該類。
以下示例定義了具有五個冗餘輸入要素的綜合分類數據集。 然後,使用決策樹算法將RFE用於選擇五個特徵。
# report which features were selected by RFE
from sklearn.datasets import make_classification
from sklearn.feature_selection import RFE
from sklearn.tree import DecisionTreeClassifier
# define dataset
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, random_state=1)
# define RFE
rfe = RFE(estimator=DecisionTreeClassifier(), n_features_to_select=5)
# fit RFE
rfe.fit(X, y)
# summarize all features
for i in range(X.shape[1]):
print('Column: %d, Selected=%s, Rank: %d' % (i, rfe.support_[i], rfe.ranking_[i]))
您的任務
對於本課程,您必須運行示例並查看選擇了哪些功能以及分配每個輸入功能的相對排名。
在下面的評論中發佈您的答案。 我很想看看你的想法。
在下一課中,您將發現如何縮放數字數據。
第4課:使用規範化縮放數據
在本課程中,您將發現如何縮放數值數據以進行機器學習。
當數字輸入變量縮放到標準範圍時,許多機器學習算法的性能會更好。
這包括使用輸入加權和的算法(例如線性迴歸)和使用距離度量的算法(例如k最近鄰)。
歸一化是在建模之前縮放數字數據的最流行技術之一。 歸一化將每個輸入變量分別縮放到範圍0-1,這是我們精度最高的浮點值的範圍。 它要求您知道或能夠準確估計每個變量的最小和最大可觀察值。 您也許可以從可用數據中估計這些值。
您可以使用scikit-learn對象MinMaxScaler規範化數據集。
下面的示例定義了一個綜合分類數據集,然後使用MinMaxScaler對輸入變量進行歸一化。
# example of normalizing input data
from sklearn.datasets import make_classification
from sklearn.preprocessing import MinMaxScaler
# define dataset
X, y = make_classification(n_samples=1000, n_features=5, n_informative=5, n_redundant=0, random_state=1)
# summarize data before the transform
print(X[:3, :])
# define the scaler
trans = MinMaxScaler()
# transform the data
X_norm = trans.fit_transform(X)
# summarize data after the transform
print(X_norm[:3, :])
您的任務
對於本課程,您必須運行示例並在規範化轉換之前和之後報告輸入變量的比例。
對於加分,請計算轉換前後每個變量的最小值和最大值,以確認已按預期應用。
在下面的評論中發佈您的答案。 我很想看看你的想法。
在下一課中,您將發現如何將分類變量轉換爲數字。
第5課:使用熱編碼(One-Hot)轉換類別
在本課程中,您將發現如何將分類輸入變量編碼爲數字。
機器學習模型要求所有輸入和輸出變量均爲數字。 這意味着,如果您的數據包含分類數據,則必須先將其編碼爲數字,然後才能擬合和評估模型。
將分類變量轉換爲數字的最流行的技術之一是熱編碼。
分類數據是包含標籤值而不是數字值的變量。
可以將分類變量的每個標籤映射到唯一的整數,稱爲序數編碼。 然後,可以將熱編碼應用於順序表示。 在此處,將爲變量中的每個唯一整數值向數據集添加一個新的二進制變量,並從數據集中刪除原始類別變量。
例如,假設我們有一個帶有三個類別(“紅色”,“綠色”和“藍色”)的“顏色”變量。 在這種情況下,需要三個二進制變量。 顏色在二進制變量中放置“ 1”值,其他顏色放置在“ 0”值中。
例如:
red, green, blue
1, 0, 0
0, 1, 0
0, 0, 1
可以通過OneHotEncoder類在scikit-learn Python機器學習庫中進行此一鍵編碼轉換。
乳腺癌數據集僅包含分類輸入變量。
https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer.csv
下面的示例加載數據集,並對每個分類輸入變量進一次熱編碼。
# one-hot encode the breast cancer dataset
from pandas import read_csv
from sklearn.preprocessing import OneHotEncoder
# define the location of the dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/breast-cancer.csv"
# load the dataset
dataset = read_csv(url, header=None)
# retrieve the array of data
data = dataset.values
# separate into input and output columns
X = data[:, :-1].astype(str)
y = data[:, -1].astype(str)
# summarize the raw data
print(X[:3, :])
# define the one hot encoding transform
encoder = OneHotEncoder(sparse=False)
# fit and apply the transform to the input data
X_oe = encoder.fit_transform(X)
# summarize the transformed data
print(X_oe[:3, :])
您的任務
對於本課,您必須運行示例並報告轉換前的原始數據,以及應用一鍵編碼後對數據的影響。
在下面的評論中發佈您的答案。 我很想看看你的想法。
在下一課中,您將發現如何將數值變量轉換爲類別。
第6課:使用kBins將數字轉換爲類別
在本課程中,您將發現如何將數字變量轉換爲分類變量。
一些機器學習算法可能更喜歡或需要分類或有序的輸入變量,例如某些決策樹和基於規則的算法。
這可能是由於數據中的異常值,多模式分佈,高指數分佈等等。
當將具有非標準分佈的數字輸入變量轉換爲具有新的分佈或全新的數據類型時,許多機器學習算法會更喜歡或表現更好。
一種方法是使用數字變量的變換來獲得離散的概率分佈,其中,每個數字值都被分配了一個標籤,並且標籤具有有序(序數)關係。
這稱爲離散化變換,它可以通過使數值輸入變量的概率分佈離散來提高數據集的某些機器學習模型的性能。
可通過KBinsDiscretizer類在scikit-learn Python機器學習庫中進行離散化轉換。
它允許您指定要創建的離散倉的數量(n_bins),變換的結果是序數編碼還是單熱編碼(編碼),以及用於劃分變量值的分佈(策略) ,例如“ uniform”。下面的示例創建一個包含10個數字輸入變量的合成輸入變量,然後使用序數編碼將每個變量編碼成10個離散的bin。
from sklearn.datasets import make_classification
from sklearn.preprocessing import KBinsDiscretizer
# define dataset
X, y = make_classification(n_samples=1000, n_features=5, n_informative=5, n_redundant=0, random_state=1)
# summarize data before the transform
print(X[:3, :])
# define the transform
trans = KBinsDiscretizer(n_bins=10, encode='ordinal', strategy='uniform')
# transform the data
X_discrete = trans.fit_transform(X)
# summarize data after the transform
print(X_discrete[:3, :])
您的任務:
對於本課,您必須運行示例並在轉換之前對原始數據進行報告,然後對轉換對數據的影響進行報告。
對於獎勵積分,請探索變換的替代配置,例如不同的策略和箱數。
在下面的評論中發佈您的答案。 我很想看看你的想法。
在下一課中,您將發現如何減少輸入數據的維數。
第7課:使用PCA進行降維在
本課程中,您將發現如何使用降維來減少數據集中輸入變量的數量。
數據集的輸入變量或特徵的數量稱爲其維數。
降維是指減少數據集中輸入變量數量的技術。
更多的輸入功能通常會使預測性建模任務對建模更具挑戰性,通常被稱爲維度詛咒。
儘管在高維統計中,降維技術通常用於數據可視化,但是這些技術可以用於應用機器學習中,以簡化分類或迴歸數據集,以便更好地擬合預測模型。
機器學習中降維的最流行技術也許是主成分分析,或簡稱PCA。 這是一種來自線性代數領域的技術,可以用作數據準備技術,以在擬合模型之前創建數據集的投影。
然後,可以將所得的數據集(投影)用作訓練機器學習模型的輸入。
scikit-learn庫提供了PCA類,該類可以適合數據集,並可以用於將來轉換訓練數據集和任何其他數據集。
下面的示例創建一個具有10個輸入變量的合成二進制分類數據集,然後使用PCA將數據集的維數減少爲三個最重要的組成部分。
# example of pca for dimensionality reduction
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA
# define dataset
X, y = make_classification(n_samples=1000, n_features=10, n_informative=3, n_redundant=7, random_state=1)
# summarize data before the transform
print(X[:3, :])
# define the transform
trans = PCA(n_components=3)
# transform the data
X_dim = trans.fit_transform(X)
# summarize data after the transform
print(X_dim[:3, :])
您的任務
對於本課程,您必須運行示例並報告原始數據集和應用轉換後的數據集的結構和形式。
要獲得加分,請使用不同數量的選定組件來探索變換。
在下面的評論中發佈您的答案。 我很想看看你的想法。
這是小課程的最後一課。
結束!
(看你走了多遠)你做到了。 做得好!
花一點時間,回頭看看你已經走了多遠。
您發現:
- 數據準備在預測建模機器學習項目中的重要性。
- 如何使用統計插補標記缺失數據並插補缺失值。
- 如何使用遞歸特徵消除來刪除冗餘輸入變量。
- 如何將具有不同比例的輸入變量轉換爲稱爲標準化的標準範圍。
- 如何將分類輸入變量轉換爲數字,稱爲“一鍵編碼”。
- 如何將數值變量轉換爲離散類別,稱爲離散化。
- 如何使用PCA創建數據集到較少維度的投影。
總結
您如何使用迷你課程? 您喜歡這個速成班嗎?