千家信息网

python数据挖掘中比较实用的几个特征选择方法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"python数据挖掘中比较实用的几个特征选择方法",在日常操作中,相信很多人在python数据挖掘中比较实用的几个特征选择方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2026年10月31日python数据挖掘中比较实用的几个特征选择方法

这篇文章主要介绍"python数据挖掘中比较实用的几个特征选择方法",在日常操作中,相信很多人在python数据挖掘中比较实用的几个特征选择方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"python数据挖掘中比较实用的几个特征选择方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

对于从事数据分析、数据挖掘的小伙伴来说,特征选择是绕不开的话题,是数据挖掘过程中不可或缺的环节。好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点、底层结构,这对进一步改善模型、算法都有着重要作用。

特征选择作用

  • 减少特征数量、降维,使模型泛化能力更强,减少过拟合

  • 增强对特征和特征值之间的理解

特征选择方法介绍

1.特征重要性

在特征的选择过程中,学习器是树模型的话,可以根据特征的重要性来筛选有效的特征,在sklearn中,GBDT和RF的特征重要性计算方法是相同的,都是基于单棵树计算每个特征的重要性,探究每个特征在每棵树上做了多少的贡献,再取个平均值。单棵树上特征的重要性定义为:特征在所有非叶节在分裂时加权不纯度的减少,减少的越多说明特征越重要

import numpy as npfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.externals.six import StringIOfrom sklearn import treeimport pydotplusclf = DecisionTreeClassifier()x = [[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3],     [1,1,2,2,1,1,1,2,1,1,1,1,2,2,1],     [1,1,1,2,1,1,1,2,2,2,2,2,1,1,1],     [1,2,2,1,1,1,2,2,3,3,3,2,2,3,1]     ]y =  [1,1,2,2,1,1,1,2,2,2,2,2,2,2,1]x = np.array(x)x = np.transpose(x)clf.fit(x,y)print(clf.feature_importances_)feature_name = ['A1','A2','A3','A4']target_name = ['1','2']dot_data = StringIO()tree.export_graphviz(clf,out_file = dot_data,feature_names=feature_name,                     class_names=target_name,filled=True,rounded=True,                     special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("Tree.pdf")

2.回归模型的系数

越是重要的特征在模型中对应的系数就会越大,而跟输出变量越是无关的特征对应的系数就会越接近于0。在噪音不多的数据上,或者是数据量远远大于特征数的数据上,如果特征之间相对来说是比较独立的,那么即便是运用最简单的线性回归模型也一样能取得非常好的效果。

from sklearn.linear_model import LinearRegressionimport numpy as npnp.random.seed(0)size = 5000#A dataset with 3 featuresX = np.random.normal(0, 1, (size, 3))#Y = X0 + 2*X1 + noiseY = X[:,0] + 2*X[:,1] + np.random.normal(0, 2, size)lr = LinearRegression()lr.fit(X, Y)#A helper method for pretty-printing linear modelsdef pretty_print_linear(coefs, names = None, sort = False):    if names == None:        names = ["X%s" % x for x in range(len(coefs))]    lst = zip(coefs, names)    if sort:        lst = sorted(lst,  key = lambda x:-np.abs(x[0]))    return " + ".join("%s * %s" % (round(coef, 3), name)                                   for coef, name in lst)
print "Linear model:", pretty_print_linear(lr.coef_)

3.平均精确率减少

平均精确率减少就是直接度量每个特征对模型精确率的影响。主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。很明显,对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大,但是对于重要的变量来说,打乱顺序就会降低模型的精确率。这个方法sklearn中没有直接提供,但是很容易实现

from sklearn.cross_validation import ShuffleSplitfrom sklearn.metrics import r2_scorefrom collections import defaultdict
X = boston["data"]Y = boston["target"]
rf = RandomForestRegressor()scores = defaultdict(list)
#crossvalidate the scores on a number of different random splits of the datafor train_idx, test_idx in ShuffleSplit(len(X), 100, .3): X_train, X_test = X[train_idx], X[test_idx] Y_train, Y_test = Y[train_idx], Y[test_idx] r = rf.fit(X_train, Y_train) acc = r2_score(Y_test, rf.predict(X_test)) for i in range(X.shape[1]): X_t = X_test.copy() np.random.shuffle(X_t[:, i]) shuff_acc = r2_score(Y_test, rf.predict(X_t)) scores[names[i]].append((acc-shuff_acc)/acc)print "Features sorted by their score:"print sorted([(round(np.mean(score), 4), feat) for feat, score in scores.items()], reverse=True)

到此,关于"python数据挖掘中比较实用的几个特征选择方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

特征 数据 模型 选择 重要 方法 数据挖掘 精确 实用 重要性 学习 顺序 变量 系数 帮助 影响 之间 作用 更多 特征值 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技活动banner 厦门中拓互联网络科技有限公司 互联网电商科技 涨乐互联网科技 期待互联网科技 互联网科技公司电话 互联网与未来科技 上海喔噻互联网科技 互联网科技视频素材 山东吉时兔互联网科技有限公司 金融科技与互联网金融相同和不同 燊美集互联网科技有限公司 科技赋能视角下互联网保险发展 济南有互联网科技公司吗 上海互联网科技公司ppt 互联网时代科技型公司的机会 互联网科技机房 陕西九四连强互联网科技有限公司 北京瑞云互联网科技有限公司 互联网高科技绘画 南京欣网互联网科技 互联网 视角下的科技创新 港股科技和互联网 电子科技大学互联网创业大赛 深圳市罗太互联网科技有限公司 国大互联网教育科技有限公司薪资 互联网科技快讯热点 福建互联网展示科技馆设计 互联网界的黑科技 北京互联网科技类企业分布
0