独热编码提升机器学习性能


独热编码对于机器学习至关重要,因为它允许算法解释分类变量。这种方法通过将每个类别表示为二进制向量来简化处理。为了提高机器学习速度,我们的博客文章概述了独热编码,并提供了一个包含示例数据和代码的实践项目。

什么是独热编码?

“独热编码”是一种表示分类数据以使机器学习算法能够快速分析的技术。这种方法将每个类别转换为长度等于类别数的二进制向量。

独热编码如何提升机器学习性能?

独热编码是一种用于机器学习模型中分类变量的预处理技术。为了让机器学习系统快速处理类别信息,必须将其转换为数值变量。这很重要,因为大多数机器学习算法无法直接解释类别数据,而是需要数值输入变量。

是的,让我们来看一个数据集,其中分类变量“水果”的可能值为“苹果”、“香蕉”或“橙子”。下表可以显示此数据集:

索引

水果

价格

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

启动您的职业生涯

完成课程获得认证

开始学习
广告