卡方函数和皮尔逊函数选取最佳特征
2017-07-02 19:10
316 查看
良好的数据挖掘结果依赖与选择好的特征作为判断依据,下面将介绍如何找到好的单个特征,通过卡方函数或者皮尔逊函数进行打分,从而选择最佳特征,数据集可以在http://archive.ics.uci.edu/ml/ datasets/Adult上进行下载,代码如下:
运行结果如下:
结果分析:通过卡方(皮尔逊)函数打分情况,我们可以清楚知道不同打分函数得到的最佳特征是不一样的,打分越高说明特征越好。最后的2行说明的是平均正确率,这里卡方函数平均正确率要高一些。
import os import pandas as pd import numpy as np data_folder = "Adult" adult_filename = os.path.join(data_folder, "adult.data") adult = pd.read_csv(adult_filename, header=None, names=["Age", "Work-Class", "fnlwgt", "Education", "Education-Num", "Marital-Status", "Occupation", "Relationship", "Race", "Sex", "Capital-gain", "Capital-loss", "Hours-per-week", "Native-Country", "Earnings-Raws"]) #查看每周工作时间的描述, #print(adult["Hours-per-week"].describe()) #查看某一项的的所有取值 #print(adult["Work-Class"].unique()) #定义每周工作时长大于40为长时间工作. adult["longHours"] = adult["Hours-per-week"] > 40 #特征的选取是难点。 #下面将删除方差达不到要求的属性列,即属性列特征相差不够明显,不能作为判断依据。 from sklearn.feature_selection import VarianceThreshold vt = VarianceThreshold() #vt只能处理数值类型数据 X = adult[["Age","Education-Num","Capital-gain","Capital-loss","Hours-per-week"]].values adult_solve = vt.fit_transform(X) #print(adult_solve) #print(vt.variances_) #选取最佳特征 #1.抽取一部分特征,比如上面的X #2.抽取目标类别列表 adult["Earning_High"] = adult["Earnings-Raws"] == " >50K" #3.利用卡方函数进行打分 from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2 #k表示选出3个属性列 transformer = SelectKBest(score_func=chi2, k=3) best_feature_chi2 = transformer.fit_transform(X,adult["Earning_High"]) #通过打分就可以判断哪些属性列比较好(这些都是针对单变量特征选取而言) print("卡方函数打分情况:",transformer.scores_) #上面使用卡方函数进行打分,下面将使用皮尔逊函数进行打分,但是皮尔森函数输入为2个一维数组,所以要对输入进行处理 from scipy.stats import pearsonr def multivariate_pearsonr(X,Y): scores, pvalues = [],[] for column in range(X.shape[1]): cur_score,cur_p = pearsonr(X[:,column], Y) scores.append(cur_score) pvalues.append(cur_p) return np.array(scores),np.array(pvalues) transformer = SelectKBest(score_func=multivariate_pearsonr, k=3) best_feature_pearson = transformer.fit_transform(X,adult["Earning_High"]) print("皮尔逊函数打分情况:",transformer.scores_) #通过采用不同的打分标准,得到的最佳特征也是不相同的,下面将使用决策树来判断哪个特征集好一些,当然判断特征集的好坏也得依据具体的算法 from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_val_score clf = DecisionTreeClassifier() scores_chi2 = cross_val_score(clf, best_feature_chi2, adult["Earning_High"], scoring="accuracy") print("卡方函数平均正确率:",np.mean(scores_chi2)) scores_pearsonr = cross_val_score(clf, best_feature_pearson, adult["Earning_High"], scoring="accuracy") print("皮尔逊函数正确率:",np.mean(scores_pearsonr))
运行结果如下:
结果分析:通过卡方(皮尔逊)函数打分情况,我们可以清楚知道不同打分函数得到的最佳特征是不一样的,打分越高说明特征越好。最后的2行说明的是平均正确率,这里卡方函数平均正确率要高一些。
相关文章推荐
- 决策树算法(四)——选取最佳特征划分数据集
- 决策树算法(四)——选取最佳特征划分数据集
- 《Visual C# 最佳实践》第四章 函数 (一):函数概念
- 《C++ primer》学习笔记之三十五:function overload resolution之三寻找最佳函数,及常见编译错
- 在静态库LIB/OBJ文件中搜索定位病毒特征码所属函数,C/C++源码
- .net 最佳实践一:监测.net代码中的高内存消耗函数
- opencv学习笔记:特征点匹配函数使用注意
- PHP分页函数,最佳分页函数,版本2011-09-25 (备份)
- .net 最佳实践一:监测.net代码中的高内存消耗函数<转>
- 《Visual C# 最佳实践》第四章 函数 (三):函数重载
- Oracle层次查询和分析函数在号段选取中的应用
- 加速SQL查询的特征函数法[转载]
- Oracle层次查询和分析函数在号段选取中的应用
- Oracle层次查询和分析函数在号段选取中的应用
- 在静态库LIB/OBJ文件中搜索定位病毒特征码所属函数,C/C++源码
- INTEL MKL中的矩阵特征值和特征向量函数的调用和测试
- 分页函数及最佳统计记录方法
- 谈谈CRF++的特征选取(http://nzinfo.spaces.live.com/blog/cns!67694E0B61E3E8D2!182.entry)
- SIFT算法学习:特征提取函数的使用
- 引用 SIFT算法学习:特征提取函数的使用