量化特征贡献度函数:feature_importances_函数/LGBMClassifier/XGBClassifier

feature_importances_是scikit-learn机器学习库中许多模型对象的属性,在训练模型之后调用该属性可以输出各个特征在模型中的重要性。

示例代码:

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression

# 生成一个示例数据集
X, y = make_regression(n_features=4, n_informative=2, random_state=0, shuffle=False)

# 训练一个随机森林回归模型
rf = RandomForestRegressor(n_estimators=100, random_state=0)
rf.fit(X, y)

# 输出特征的重要性
print(rf.feature_importances_)

在上述代码中,我们训练了一个随机森林回归模型,并使用feature_importances_输出了各个特征的重要性。输出结果为:[0.08519548, 0.39799048, 0.40214713, 0.11466691],即第2个特征和第3个特征在模型中较为重要,而第1个和第4个特征的重要性相对较低。

通过观察特征的重要性分布情况,我们可以了解到哪些特征在模型预测中有更高的权重,从而可以进行模型的优化和特征的筛选。


LGBMClassifier

LGBMClassifier是一种基于决策树的集成型机器学习算法,它采用了基于梯度提升树(Gradient Boosting Decision Tree)的模型框架,并具有高效、灵活、精度高的特点。由于算法的高效性,LGBMClassifier逐渐成为机器学习领域中的常用算法。

LGBMClassifier的主要优势:

  1. 高效:相对其它基于梯度提升树的算法,LGBMClassifier 显著提高了运行速度。

  2. 精度高:LGBMClassifier 在大数据集上的训练精度能够与同类别的算法相比较。

  3. 支持并行化:LGBMClassifier 支持类似多线程的并行化处理,这可以大大提升训练效率。

  4. 可定制度高:LGBMClassifier 与其他集成的决策树模型一样,能够支持很多的调整方法。

示例代码:

from lightgbm import LGBMClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# 训练 LGBMClassifier 模型
model = LGBMClassifier()
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 输出模型的准确率
acc = model.score(X_test, y_test)
print("Accuracy is : ", acc)

在上述代码中,示例数据集使用了鸢尾花数据集,将其分成了训练集和测试集,使用LGBMClassifier训练模型并在测试集上进行预测,在测试集上输出了模型的准确率。


XGBClassifier

XGBClassifier是一种基于梯度提升决策树算法的分类器模型,它使用了XGBoost库作为基础实现。XGBClassifier具有高效率、准确性和鲁棒性的优点,在数据科学和机器学习中应用广泛。

在使用XGBClassifier进行分类时,需要先进行数据清洗、特征工程和数据准备。然后,通过调用XGBClassifier实例,并设置参数来创建分类器模型。下面是一些常用的参数设置:

- learning_rate:学习率,控制每次迭代的步长,默认为0.1。

- n_estimators:决策树的个数,即迭代次数,默认为100。

- max_depth:最大树深度,控制模型的复杂度,默认为6。

- subsample:随机采样比例,用于训练每个决策树的子样本比例,默认为1。

- colsample_bytree:列采样比例,用于训练每个决策树的特征子集比例,默认为1。

- objective:损失函数,用于评估分类器的性能,默认为“binary:logistic”,用于二分类问题。

- random_state:随机种子,用于确保模型的可重复性。

创建模型后,可以使用fit()方法拟合数据进行模型训练。训练完成后,可以使用predict()方法进行预测,并使用score()方法计算模型在测试集上的准确度。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个错误通常是由于选中的特征名称和特征重要性的数量不致所引起的。请确保创建 `feature_importances_df` 数据帧时,选中的特征名称和特征重要性具有相同的长度。 以下是一个修正后的示例代码: ```python import pandas as pd import numpy as np from sklearn.ensemble import RandomForestClassifier from sklearn.feature_selection import SelectFromModel import matplotlib.pyplot as plt # 1. 加载数据集 data = pd.read_csv('genotype_dataset.csv') X = data.iloc[:, 1:] # 特征 y = data.iloc[:, 0] # 标签 # 2. 数据预处理(如果有需要) # 3. 特征选择 rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X, y) feature_importances = rf.feature_importances_ selector = SelectFromModel(rf, threshold='median', prefit=True) X_selected = selector.transform(X) selected_features = X.columns[selector.get_support()] # 4. 输出结果为CSV文件(候选特征) selected_data = pd.concat([y, pd.DataFrame(X_selected, columns=selected_features)], axis=1) selected_data.to_csv('selected_features.csv', index=False) # 5. 输出排名前50的特征为CSV文件 feature_importances_df = pd.DataFrame({'Feature': selected_features, 'Importance': feature_importances}) top_50_features = feature_importances_df.nlargest(50, 'Importance') top_50_features.to_csv('top_50_features.csv', index=False) # 6. 绘制特征重要性图表 plt.bar(feature_importances_df['Feature'], feature_importances_df['Importance']) plt.xticks(rotation=90) plt.xlabel('Feature') plt.ylabel('Importance') plt.title('Feature Importance') plt.show() ``` 在修正后的代码中,我将 `selected_features` 和 `feature_importances` 作为字典传递给 `pd.DataFrame`,以确保它们具有相同的长度。另外,我还添加了一个特征重要性的图表绘制部分。请确保你的数据集中的特征名称与代码中的特征名称一致,并确保已安装所需的Python库(如pandas、numpy、sklearn和matplotlib)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GeekyGuru

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值