前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法金 | 使用随机森林获取特征重要性

算法金 | 使用随机森林获取特征重要性

原创
作者头像
算法金
修改2024-06-24 23:17:22
920
修改2024-06-24 23:17:22
举报
文章被收录于专栏:机器学习机器学习

大侠幸会幸会,我是日更万日 算法金;0 基础跨行转算法,国内外多个算法比赛 Top;放弃 BAT Offer,成功上岸 AI 研究院 Leader;

<随机森林及其应用领域> 随机森林是一种强大的机器学习算法,其基本原理在于通过集成多个决策树来提高整体性能。决策树是一种流程图结构,通过一系列的决策来达到最终目标。

而随机森林则是通过构建许多这样的决策树,每个决策树都在某种程度上是独立的,从而提高了模型的稳健性和准确性。这种算法在各种领域都有着广泛的应用。

- 项目实战 -

在接下来的部分,我们深入地探讨特征重要性在实际问题中的运用。我们将使用UCI红酒分类数据集,这个数据集来自UCI机器学习仓库,总共包含了3种红酒,178个样本。每个样本有13个特征,用于描述红酒的各种化学成分。https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data

<加载UCI红酒分类数据集>

数据集概览

代码语言:javascript
复制
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 加载数据集
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data"
column_names = ["Class", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium", "Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins", "Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]
data = pd.read_csv('wine-1.csv', names=column_names)

# 分割数据集
X = data.drop("Class", axis=1)
y = data["Class"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

在这段代码的帮助下,我们不需要任何高超的技术,只需要几行简单的代码,就能将这些数据划分成可以训练机器学习模型的形式。

<训练随机森林模型>

构建随机森林模型

代码语言:javascript
复制
# 创建随机森林分类器
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)

# 在训练集上训练模型
rf_classifier.fit(X_train, y_train)

# 训练完成后,评估模型

training_accuracy = rf_classifier.score(X_train, y_train) 
print(f'训练集准确率:{training_accuracy:.2f}') # 评估训练集上的准确率

test_accuracy = rf_classifier.score(X_test, y_test)
print(f'测试集准确率:{test_accuracy:.2f}') # 评估测试集上的准确率

训练集准确率:1.00测试集准确率:1.0完美!

<查看特征重要性>

特征重要性的计算

决策树是通过计算每次特征划分导致的样本杂质(信息熵等)减少程度,来决定该特征的重要性。RandomForestClassifier会自动计算并存储特征重要性。

代码语言:javascript
复制
# 获取特征重要性
feature_importance = pd.DataFrame({"Feature": X_train.columns, "Importance": rf_classifier.feature_importances_})
feature_importance = feature_importance.sort_values(by="Importance", ascending=False)

# 打印特征重要性
print(feature_importance)

<可视化特征重要性>

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

# 提取特征重要性信息
feature_names = X_train.columns
importances = rf_classifier.feature_importances_
indices = np.argsort(importances)[::-1]

# 绘制条形图
plt.bar(range(X_train.shape[1]), importances[indices], align='center')

# 在每个条形图上显示特征重要性数值
for x in range(X_train.shape[1]):
    text = '{:.2f}'.format(importances[indices[x]])
    plt.text(x, importances[indices[x]] + 0.01, text, ha='center')

# 设置x轴刻度标签
plt.xticks(range(X_train.shape[1]), feature_names[indices], rotation=90)
plt.xlim([-1, X_train.shape[1]])
plt.ylim(0.0, np.max(importances) + 0.05)

# 添加标签和标题
plt.xlabel('Feature')
plt.ylabel('Importance')
plt.title('Random Forest Feature Importance')

# 自动调整布局并显示图形
plt.tight_layout()
plt.show()

<自动选择重要特征>

应用特征选择算法

代码语言:javascript
复制
from sklearn.feature_selection import SelectFromModel

# 使用SelectFromModel进行特征选择
sfm = SelectFromModel(rf_classifier, threshold='median') # 阈值可选,比如threshold=0.1
sfm.fit(X_train, y_train)

# 选出5个重要特征
X_train_selected = sfm.transform(X_train)
X_test_selected = sfm.transform(X_test)

# 查看选中的特征
selected_features = X_train.columns[sfm.get_support()]

# 重新建立模型并在选中特征上进行训练
rf_classifier_selected = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier_selected.fit(X_train_selected, y_train)

# 在测试集上进行预测
y_pred_selected = rf_classifier_selected.predict(X_test_selected)

# 评估模型性能
accuracy_selected = accuracy_score(y_test, y_pred_selected)

# 打印选中的特征和模型评估结果
print("Selected Features:", list(selected_features))
print("Model Accuracy with Selected Features:", accuracy_selected)

自动选择了 7 个重要特征,其中脯氨酸和酒精含量位列前两。这与手动分析特征重要性的结果是一致的。通过运行可以发现,结果和13个特征的方法相当,Cool...

代码语言:javascript
复制
 _____             _ 
/  __ \           | |
| /  \/ ___   ___ | |
| |    / _ \ / _ \| |
| \__/\ (_) | (_) | |
 \____/\___/ \___/|_|

打完收工 [ 抱拳礼 ]星辰大海,江湖再会,溜了溜了~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • <加载UCI红酒分类数据集>
  • 数据集概览
  • <训练随机森林模型>
  • 构建随机森林模型
  • <查看特征重要性>
  • 特征重要性的计算
  • <自动选择重要特征>
  • 应用特征选择算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档