獨熱編碼提升機器學習效能
獨熱編碼對於機器學習至關重要,因為它允許演算法解釋分類變數。這種方法透過將每個類別表示為二進位制向量來簡化處理。為了提高機器學習速度,我們的部落格文章概述了獨熱編碼,並提供了一個包含示例資料和程式碼的實踐專案。
什麼是獨熱編碼?
“獨熱編碼”是一種表示分類資料以使機器學習演算法能夠快速分析的技術。這種方法將每個類別轉換為長度等於類別數的二進位制向量。
獨熱編碼如何提升機器學習效能?
獨熱編碼是一種用於機器學習模型中分類變數的預處理技術。為了讓機器學習系統快速處理類別資訊,必須將其轉換為數值變數。這很重要,因為大多數機器學習演算法無法直接解釋類別資料,而是需要數值輸入變數。
是的,讓我們來看一個數據集,其中分類變數“水果”的可能值為“蘋果”、“香蕉”或“橙子”。下表可以顯示此資料集:
索引 |
水果 |
價格 |
|---|---|---|
0 |
蘋果 |
1.2 |
1 |
香蕉 |
0.9 |
2 |
橙子 |
1.1 |
3 |
蘋果 |
1.4 |
4 |
香蕉 |
1.0 |
為了在“水果”變數上應用獨熱編碼,我們首先建立三個新的二進位制變數“水果_蘋果”、“水果_香蕉”和“水果_橙子”。然後,對於初始資料集中的每一行,如果存在正確的類別,則將二進位制變數的值設定為 1,否則設定為 0。獨熱編碼後的最終表如下所示:
| 水果_蘋果 | 水果_香蕉 | 水果_橙子 | 價格 |
|---|---|---|---|
| 1 | 0 | 0 | 1.2 |
| 0 | 1 | 0 | 0.9 |
| 0 | 0 | 1 | 1.1 |
| 1 | 0 | 0 | 1.4 |
| 0 | 1 | 0 | 1.0 |
我們可以看到,類別變數“水果”已被拆分為三個二進位制變數,以便機器學習演算法更容易理解。
現在,機器學習系統可以理解每種水果種類與價格之間的相關性,併產生更精確的預測,這要歸功於獨熱編碼。
使用隨機森林演算法改進機器學習效能的獨熱編碼
我們研究如何使用獨熱編碼來提高處理分類資料時的機器學習效率。將建立一個新的資料集,使用獨熱編碼轉換分類變數,並使用隨機森林方法訓練機器學習模型。我們的專案將使用 Python 和 scikit-learn 框架實現。
匯入庫並建立資料集
讓我們首先構建一個包含四個變數“大小”、“價格”、“位置”和“臥室”的新資料集。“位置”分類變數具有三個可能的值:“A”、“B”和“C”,而“臥室”分類變數具有四個可能的值:“1”、“2”、“3”和“4”。
import pandas as pd
import numpy as np
# create new dataset
df = pd.DataFrame({
'Size': [1381, 4057, 3656, 2468, 2828, 4385, 2006, 1915, 1593, 2929],
'Price': [125527, 416447, 150528, 320128, 232294, 284386, 292693, 320596, 201712, 324857],
'Location': ['A', 'C', 'B', 'B', 'A', 'C', 'A', 'C', 'B', 'C'],
'Bedrooms': ['1', '2', '4', '4', '3', '1', '1', '2', '3', '2']
})
# display dataset
print(df)
輸出
Size Price Location Bedrooms 0 1381 125527 A 1 1 4057 416447 C 2 2 3656 150528 B 4 3 2468 320128 B 4 4 2828 232294 A 3 5 4385 284386 C 1 6 2006 292693 A 1 7 1915 320596 C 2 8 1593 201712 B 3 9 2929 324857 C 2
應用獨熱編碼
此後,將使用單熱編碼更改分類變數“位置”和“臥室”。此更新將使用 Python 中的 pandas 庫進行。
# performing one hot encoding one_hot_location = pd.get_dummies(df['Location'], prefix='Location') one_hot_bedrooms = pd.get_dummies(df['Bedrooms'], prefix='Bedrooms') # concatenating one hot encoding with original dataframe df = pd.concat([df, one_hot_location, one_hot_bedrooms], axis=1) # droping original categorical variables df = df.drop(['Location', 'Bedrooms'], axis=1) # displaying updated dataset print(df)
輸出
Size Price Location_A Location_B Location_C Bedrooms_1 Bedrooms_2 \ 0 1381 125527 1 0 0 1 0 1 4057 416447 0 0 1 0 1 2 3656 150528 0 1 0 0 0 3 2468 320128 0 1 0 0 0 4 2828 232294 1 0 0 0 0 5 4385 284386 0 0 1 1 0 6 2006 292693 1 0 0 1 0 7 1915 320596 0 0 1 0 1 8 1593 201712 0 1 0 0 0 9 2929 324857 0 0 1 0 1 Bedrooms_3 Bedrooms_4 0 0 0 1 0 0 2 0 1 3 0 1 4 1 0 5 0 0 6 0 0 7 0 0 8 1 0 9 0 0
機器學習模型
更改類別資料後,我們現在可以使用隨機森林方法建立機器學習模型。我們將從我們的資料集中建立一個訓練集和一個測試集。
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
# spliting dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(df.drop(['Price'], axis=1), df['Price'], test_size=0.3, random_state=0)
# training Random Forest model on training set
rf = RandomForestRegressor(n_estimators=100, random_state=0)
rf.fit(X_train, y_train)
# evaluating Random Forest model on test set
y_pred = rf.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
rmse = mean_squared_error(y_test, y_pred, squared=False)
r2 = r2_score(y_test, y_pred)
print('Mean Squared Error:', mse)
print('Root Mean Squared Error:', rmse)
print('R-squared score:', r2)
輸出
Mean Squared Error: 12664984402.161505 Root Mean Squared Error: 112538.81286987838 R-squared score: -10.130530314227844
在這裡,我們可以看到我們的模型表現相當不錯,均方根誤差約為 12664984402,R 平方分數約為 -10.1。我們可以嘗試其他隨機森林演算法超引數、特徵工程和其他方法來進一步提高模型的效能,但仍有改進的空間。
結論
總之,機器學習實踐者必須瞭解獨熱編碼的優點、侷限性和最佳實踐,以便成功地應用它。透過將獨熱編碼與其他技術相結合,我們可以建立準確可靠的機器學習模型,幫助我們解決各種實際問題。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP