数据和特征 限定了机器学习性能的上限,优化 模型和算法 来逼近这个上限
特征处理
- 预处理
- 特征选择
- 降维
特征选择的意义
- 降低拟合度
- 预测结果更精确
- 减少模型训练时间
无关的特征会降低魔性的额准确度,尤其是线性算法(线性回归算法、逻辑回归算法)
特征选择的方法
- 单变量特征选择
- 递归特征消除 RFE
- 主要成分分析 PCA
- 特征重要性
单变量特征选择
- 卡方检验法
- 相关系数法
- 互信息法
卡方检验法代码
#coding=utf-8
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# 导入数据
filename = 'iris.data'
names = ['separ-length', 'separ-width', 'petal-length', 'petal-width', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:, 0:4] # 输入数据
Y = array[:,4] # 输出结果
ret=SelectKBest(score_func=chi2, k=2).fit(X,Y)
print(ret.scores_) # 分数最高的那个属性 就是 最有决定性的特征
features = ret.transform(X)
print(features) # 查看分数最高的那K个属性 对应的数据
#print(fit.scores_)
递归特征消除
- 线性回归
- 逻辑回归
逻辑回归法代码
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
filename = "./iris.data"
names = ['separ-length', 'separ-width', 'petal-length', 'petal-width', 'class']
array = read_csv(filename, names=names).values
X=array[:,0:4]
Y=array[:,4]
model=LogisticRegression()
fit = RFE(model, 1).fit(X,Y)
print("所有特征:")
print(fit.n_features_)
print("被选中的特征:")
print(fit.support_)
print("特征排名")
print(fit.ranking_)
主要成分分析
- PCA
- LDA
PCA算法代码
from pandas import read_csv
from sklearn.decomposition import PCA
filename = "./iris.data"
names = ['separ-length', 'separ-width', 'petal-length', 'petal-width', 'class']
array = read_csv(filename,names=names).values
X = array[:,0:4]
Y = array[:,4]
fit = PCA(n_components=1).fit(X)
print(fit.components_)
特征重要性
- 袋装决策树算法
- 随机森林算法
- 极端随机树算法
极端随机树算法代码
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
filename = "./iris.data"
names = ['separ-length', 'separ-width', 'petal-length', 'petal-width', 'class']
array = read_csv(filename, names=names).values
X=array[:,0:4]
Y=array[:,4]
fit = ExtraTreesClassifier().fit(X,Y)
print(fit.feature_importances_)
总结
上述代码都可以评估出,蝴蝶花的花瓣长度 是最能确定蝴蝶花种类的属性。