獨熱編碼提升機器學習效能


獨熱編碼對於機器學習至關重要,因為它允許演算法解釋分類變數。這種方法透過將每個類別表示為二進位制向量來簡化處理。為了提高機器學習速度,我們的部落格文章概述了獨熱編碼,並提供了一個包含示例資料和程式碼的實踐專案。

什麼是獨熱編碼?

“獨熱編碼”是一種表示分類資料以使機器學習演算法能夠快速分析的技術。這種方法將每個類別轉換為長度等於類別數的二進位制向量。

獨熱編碼如何提升機器學習效能?

獨熱編碼是一種用於機器學習模型中分類變數的預處理技術。為了讓機器學習系統快速處理類別資訊,必須將其轉換為數值變數。這很重要,因為大多數機器學習演算法無法直接解釋類別資料,而是需要數值輸入變數。

是的,讓我們來看一個數據集,其中分類變數“水果”的可能值為“蘋果”、“香蕉”或“橙子”。下表可以顯示此資料集:

索引

水果

價格

0

蘋果

1.2

1

香蕉

0.9

2

橙子

1.1

3

蘋果

1.4

4

香蕉

1.0

為了在“水果”變數上應用獨熱編碼,我們首先建立三個新的二進位制變數“水果_蘋果”、“水果_香蕉”和“水果_橙子”。然後,對於初始資料集中的每一行,如果存在正確的類別,則將二進位制變數的值設定為 1,否則設定為 0。獨熱編碼後的最終表如下所示:

水果_蘋果
水果_香蕉
水果_橙子
價格
1001.2
0100.9
0011.1
1001.4
0101.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。我們可以嘗試其他隨機森林演算法超引數、特徵工程和其他方法來進一步提高模型的效能,但仍有改進的空間。

結論

總之,機器學習實踐者必須瞭解獨熱編碼的優點、侷限性和最佳實踐,以便成功地應用它。透過將獨熱編碼與其他技術相結合,我們可以建立準確可靠的機器學習模型,幫助我們解決各種實際問題。

更新於:2023年7月31日

瀏覽量:159

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.