sklearn的快速使用之二(特征工程)


from sklearn.datasets import load_iris
iris = load_iris()
features  = iris.data
target = iris.target
print (features)
print (target)


# 无量纲化
'''
把不同数值规格的数据转换为同一个规格, 比如0附近。
标准化( z-score standardization ) ( 用于列向量)
对于服从正态分布或假定服从正态分布的特征转换为标准正态分布
'''

from sklearn.preprocessing import StandardScaler
standard_feature = StandardScaler().fit_transform(features)
print (standard_feature)


'''
区间缩放
使用最大值和最小值进行区间缩放, 可以把数据缩放到[0,1]区间:
'''
from sklearn.preprocessing import MinMaxScaler
MaxMin_feature = MinMaxScaler().fit_transform(features)
print (MaxMin_feature)

'''
对于定量特征二值化(用于列向量)
定性: 高和不高
定量: 180cm, 160cm
如果定量数据本质上只关心定性信息时, 可以通过设置阈值对定量信息二值化。 在这个过程中会损失掉我们不关心的定量信息只留下我们关心的定性信息。
'''
## 阈值姑且设置为3  大于3的设置为1  小于3的设置为0
from sklearn.preprocessing import Binarizer
bin_feature = Binarizer(threshold=3).fit_transform(features)
print (bin_feature)

'''
对于定性特征进行哑编码。
对于定性文字标记的特征, 并且特征之间没有大小关系,在建模之前需要对其进行哑编码。
由于每一个定性标签之间并没有大小关系,所以不能直接转化为数字。 需要把每一个标签
拆分成单独的特征,进行0,1 编码。
如下例子:
一条特征,四个样本,4行数据 分别为['A', 'B', 'C', 'D'], 通过哑编码后可以展开为4x4的矩阵。 
每一个类别展开为单独的特征,代码如下。 可通过sklearn里面preprocess库,OneHotEncoder配合LabelEncoder实现。
'''
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
import numpy as np
features = np.array(list('ABCD'))
le = LabelEncoder()
features_label = le.fit_transform(features)
print (features_label)
enc = OneHotEncoder()
one_hot = enc.fit_transform(features_label.reshape(4, 1)).toarray()
print(one_hot)


'''
缺失值处理(用于列向量)
数据预处理时候对于缺失值是比较常见的。 最简单粗暴的方法莫过于
直接把带有缺失值的样本去掉。 但是某些情况下, 几乎每条数据都
带有缺失值, 这样的话就需要对缺失值进行填充。
sklearn.preprocess.Inputer类中提供了简单的缺失值填充方法。
'''
from numpy import vstack, array, nan
from sklearn.preprocessing import Imputer
features = Imputer(strategy='mean').fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))
print (features)


'''
数据变换
多项式变换(对行向量处理)
当特征比较少的时候, 可以对很少的特征进行多项式变化,
产生更多的特征。 多项式变换,简单来说就是把现有的特
征排列组合相乘。 
如果是degree为2的变换则是, 把现有的特征中, 抽取
两个相乘,并且获得所有组合的结果。
'''

from sklearn.preprocessing import PolynomialFeatures
poly_feature = PolynomialFeatures(degree=2).fit_transform(features)
print (len(poly_feature[0]))


'''
自定义变换
使用自定义函数对于原始数据进行变换。 preprocessing种的FunctionTransformer可以实现:
'''

from numpy import log1p
from sklearn.preprocessing import FunctionTransformer
log1p_feature = FunctionTransformer(log1p).fit_transform(features)
print (log1p_feature)

'''
数据预处理sklearn.preprocessing 的方法总结。
类 功能 说明
StandardScaler 无量纲化 标准化,基于特征矩阵的列,将特征值转换至服从标准正态分布
MinMaxScaler 无量纲化 区间缩放,基于最大最小值,将特征值转换到[0, 1]区间上
Normalizer 归一化 基于特征矩阵的行,将样本向量转换为“单位向量”
Binarizer 二值化 基于给定阈值,将定量特征按阈值划分
OneHotEncoder 哑编码 将定性数据编码为定量数据
Imputer 缺失值计算 计算缺失值,缺失值可填充为均值等
PolynomialFeatures 多项式数据转换 多项式数据转换
FunctionTransformer 自定义单元数据转换 使用单变元的函数来转换数据

'''


'''
特征选择
数据预处理完成以后,特征比较多时,就需要对特征进行选择。 使有意义的特征输入模型进行训练。 特征选择通常来说从两个方面入手:
特征是否发散:特征如果不发散, 方差很小接近于0, 就意味着这个特征在所有样本中的分布是没有差异的, 说明这个特征对于样品区分没有贡献。
特征与目标相关项: 对于分类问题, 特征与分类目标相关性越大说明特征对于分类问题作用也就越大。
特征选择的方法:
Filter: 过滤法, 通过给定的方差阈值对特征进行分类, 只保留方差过阈值的特征。
Wrapper: 包装发, 根基后续模型的学习效果, 目标函数, 每次选取若干或者排除若干特征。 来寻找最优特征。
Embedded: 嵌入法, Filter与Wrapper 的结合。 先使用某些机器学习算法和模型训练,得到各个特征的权值洗漱,
根据系数大小选择特征。例如使用RandomForest.
在sklearn中可以使用feature_selection库来进行特征选择。

VarianceThreshold: 删除特征值的方差达不到最低标准的特征
SelectKBest: 返回k个最佳特征
SelectPercentile: 返回表现最佳的前r%个特征
'''

'''
Filter法
方差选择法
方差选择法需要计算各特征的方差,然后根据给定的方差阈值选择特征。
'''
from sklearn.feature_selection import VarianceThreshold
selected_feature = VarianceThreshold(threshold=0.8).fit_transform(features)
print (selected_feature)

'''
卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,
实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。
注意:卡方检验针对分类变量。
'''
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest

selected_feature = SelectKBest(chi2, k=3).fit_transform(features[0:130], target[0:130])
print (selected_feature)


'''
 Wrapper
递归特征消除法
递归特征消元法需要给定一个预测模型(基模型),
然后使用最初的特征进行模型训练得到每一个特征的权值, 
然后丢弃权值最小的的特征,重新训练模型。
如此往复直到得到所需要的数量时停止。
sklearn.feature_selection中的RFE类实现。
代码例子中,选取逻辑回归模型作为基模型。

'''
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
selected_feature = RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(features[0:100], target[0:100])
print (selected_feature)

'''
Embedded
基于惩罚项的特征选择法
使用带惩罚项的基模型, 除了筛选特征,同时进行降维。 
使用feature_selection库的SelectFromModel类结合L1惩罚项的逻辑回归模型实现:
'''
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
selected_feature = SelectFromModel(estimator=LogisticRegression(penalty="l1", C=0.1)).fit_transform(features[0:100], target[0:100])
print (selected_feature)


'''
基于树模型的特征选择
通过树模型的GBDT作为基模型进行特征选择, 使用SelectFromModel结合GBDT模型实现:

'''

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
selected_feature = SelectFromModel(estimator=GradientBoostingClassifier()).fit_transform(features[0:100], target[0:100])
print (selected_feature)

'''
PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
mle  自动判断降维数
'''
from sklearn.decomposition import PCA
pca = PCA(n_components='mle')
selected_feeature = pca.fit_transform(features)
orig = pca.inverse_transform(selected_feeature)
print(pca.explained_variance_ratio_)
print (selected_feeature)

test = [[5.84333333,3.054,3.75866667,1.19866667]]
print (pca.transform(test))


from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
selected_feeature = LDA(n_components=n).fit_transform(features, target)
print(selected_feeature)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值