特征工程实践笔记

一、特征工程

1、构造组合特征:对鸢尾花数据集,通过构造前两列相乘而得到的新列特征。

代码实现过程:
(1)获取数据:通过sklearn.datasets获取iris数据;
(2)使用tensorflow的构建图来完成相乘计算过程,构建新列特征。

import tensorflow as tf
from sklearn.datasets import load_iris
iris = load_iris()
data1 = tf.constant(iris.data[:,0])
data2 = tf.constant(iris.data[:,1])
with tf.Session() as sess:
    result = sess.run(data1*data2)
    print(result)

2、特征排序:通过递归特征消除,获取鸢尾花数据集特征排名

代码实现过程:
(1)调用特征工程中的特征选择库,利用递归式特征消除,对获取到的特征进行排序。
(2)在此,设置n_feature_to_select = 1,获取到data的4列数据的排名为[4,2,3,1],即为特征选择的排序。

from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
iris = load_iris()
selector = RFE(estimator=LogisticRegression(), n_features_to_select=1).fit(iris.data, iris.target)
data = selector.transform(iris.data)
#print(selector.n_features_)
#print(data)
print(selector.ranking_)

二、使用鸢尾花数据集

1、分析四个特征统计信息和状况

代码实现过程:
(1)获取iris数据集的dict_keys.
(2)通过iris[‘DESCR’],获取数据的统计信息
在这里插入图片描述

2、通过最近邻(KNN)分类器,设置k=5.预测花种类,尝试使用特征扩展或特征选择方式提升预测评分。

原代码,预测正确率为0.973214285714
(1)对数据data进行预处理,
a、使用标准化,预测正确率为0.964285714286
b、使用区间缩放,预测正确率为0.982142857143
c、使用二值化,预测正确率为0.571428571429
(2)特征选择
使用卡方检验、GBDT、RFE,预测正确率为0.964285714286

from __future__ import print_function 
from sklearn.datasets import load_iris
from sklearn.cross_validation import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import Binarizer
from sklearn.preprocessing import OneHotEncoder
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2#选择K个最好的特征,返回选择特征后的数据
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier 
iris = load_iris()
########(1)标准化,返回值为标准化后的数据
#X = StandardScaler().fit_transform(iris.data)
########(2)区间缩放,返回值为缩放到[0, 1]区间的数据
X1 = MinMaxScaler().fit_transform(iris.data)
########(3)二值化,阈值设置为3,返回值为二值化后的数据
#X = Binarizer(threshold=3).fit_transform(iris.data)
#哑编码,对IRIS数据集的目标值,返回值为哑编码后的数据
# OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))
#X = iris.data

# selector = SelectKBest(chi2, k=2).fit(X1, iris.target)
# X = selector.transform(X1)

# selector = RFE(estimator=LogisticRegression(), n_features_to_select=2).fit(X1, iris.target)
# X = selector.transform(X1)
selector = SelectFromModel(GradientBoostingClassifier()).fit(X1, iris.target)
X = selector.transform(X1)
y = iris.target
print(X, y)
# (0) feature engineering
# the degree-2 polynomial features are [1, a, b, a^2, ab, b^2].
poly = PolynomialFeatures(2)
X_Poly = poly.fit_transform(X)
###X = X_Poly
print(X_Poly)

# (1) test train split #
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4)
knn = KNeighborsClassifier(n_neighbors=5)

# (2) Model training
knn.fit(X_train, y_train)

# (3) Predict & Estimate the score
# y_pred = knn.predict(X_test)
# print(knn.score(X_test, y_test))
y_pred = knn.predict(X_train)
print(knn.score(X_train, y_train))

猜你喜欢

转载自blog.csdn.net/u010801994/article/details/83145230
今日推荐