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

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

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

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

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)

<训练随机森林模型>

# 创建随机森林分类器

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}') # 评估测试集上的准确率

<查看特征重要性>

# 获取特征重要性

feature_importance = pd.DataFrame({"Feature": X_train.columns, "Importance": rf_classifier.featureimportances})
feature_importance = feature_importance.sort_values(by="Importance", ascending=False)

# 打印特征重要性

print(feature_importance)

<可视化特征重要性>
import numpy as np
import matplotlib.pyplot as plt

# 提取特征重要性信息

feature_names = X_train.columns
importances = rf_classifier.featureimportances
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()

<自动选择重要特征>

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)

/ \ | |
| / \/ _
| |
| | /
\ / _ | |
| \
/\ () | () | |
_/\/ __/||

|
27天前
|

**摘要：** 这篇文章介绍了决策树作为一种机器学习算法，用于分类和回归问题，通过一系列特征测试将复杂决策过程简化。文章详细阐述了决策树的定义、构建方法、剪枝优化技术，以及优缺点。接着，文章讨论了集成学习，包括Bagging、Boosting和随机森林等方法，解释了它们的工作原理、优缺点以及如何通过结合多个模型提高性能和泛化能力。文中特别提到了随机森林和GBDT（XGBoost）作为集成方法的实例，强调了它们在处理复杂数据和防止过拟合方面的优势。最后，文章提供了选择集成学习算法的指南，考虑了数据特性、模型性能、计算资源和过拟合风险等因素。
21 0
|
1月前
|

【6月更文挑战第21天】本文介绍经典排序算法的特征和例子，详细步骤和例子包含在内，可以只选择阅读关心的内容。
31 3
|
1月前
|

82 2
|
15天前
|

Python实现随机森林回归模型(RandomForestRegressor算法)项目实战
Python实现随机森林回归模型(RandomForestRegressor算法)项目实战
16 0
|
1月前
|

59 4
|
26天前
|

26 0
|
2月前
|

【Python 机器学习专栏】随机森林算法的性能与调优
【4月更文挑战第30天】随机森林是一种集成学习方法，通过构建多棵决策树并投票或平均预测结果，具有高准确性、抗过拟合、处理高维数据的能力。关键性能因素包括树的数量、深度、特征选择和样本大小。调优方法包括调整树的数量、深度，选择关键特征和参数优化。Python 示例展示了使用 GridSearchCV 进行调优。随机森林广泛应用于分类、回归和特征选择问题，是机器学习中的重要工具。
98 1
|
2月前
|

39 6
|
2月前
|

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病-2
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
42 5
|
2月前
|

MATLAB、R用改进Fuzzy C-means模糊C均值聚类算法的微博用户特征调研数据聚类研究
MATLAB、R用改进Fuzzy C-means模糊C均值聚类算法的微博用户特征调研数据聚类研究
46 1