使用sklearn进行数据预处理 特征选择
2018-09-11 08:57
302 查看
1.特征二元化
[code]from sklearn.preprocessing import Binarizer #设置一个threshold值 大于该值为0 小于该值为1 def testBinarizer(): X = [ [1,2,3,4,5], [5,4,3,2,1], [3,3,3,3,3], [1,1,1,1,1]] binarizer = Binarizer(threshold=2.5) print('转化后:',binarizer.transform(X)) testBinarizer()
输出结果
转化后: [[0 0 1 1 1] [1 1 1 0 0] [1 1 1 1 1] [0 0 0 0 0]]
2.独热编码one-hot encoding
用于处理无序离散特征,如代码中的color
独热编码会为每个离散值创建一个哑特征(dummy feature)。
什么是哑特征呢?举例来说,对于‘颜色’这一特征中的‘蓝色’,我们将其编码为[蓝色=1,绿色=0,红色=0],同理,对于‘绿色’,
我们将其编码为[蓝色=0,绿色=1,红色=0],特点就是向量只有一个1,其余均为0,故称之为one-hot。
[code]import pandas as pd from pandas import DataFrame data = {'color':['green','red','blue'], 'size':['M','L','XL'], 'price':['10.1','13.5','15.3'], 'classlabel':['class1','class2','class1']} df = DataFrame(data) from sklearn.preprocessing import LabelEncoder class_le = LabelEncoder() y = class_le.fit_transform(df['classlabel'].values) #y转化为的值 array([0, 1, 0], dtype=int32) #get_dummies默认会对DataFrame中所有字符串类型的列进行独热编码: a = ['price', 'color', 'size'] pd.get_dummies(df[a])
输出结果
3.标准化
min-max标准化
[code]from sklearn.preprocessing import MinMaxScaler import numpy as np #x-min/max-min 1-0/2-0 X_train = np.array([[1,-1,2], [2,0,0], [0,1,-1]]) min_max_scaler = MinMaxScaler() x_train_minmax = min_max_scaler.fit_transform(X_train) print(x_train_minmax)
输出结果:
[[ 0.5 0. 1. ] [ 1. 0.5 0.33333333] [ 0. 1. 0. ]]
z-score标准化
[code]from sklearn.preprocessing import StandardScaler
计算公式 :(X-mean)/std
绝对值最大化标准化
[code]from sklearn.preprocessing import MaxAbsScaler
计算公式:将每个属性除以该属性的绝对值中的最大值
4.正则化
[code]from sklearn.preprocessing import Normalizer def test_Normalizer(): X = [ [1,2,3,4,5], [5,4,3,2,1], [3,3,3,3,3], [1,1,1,1,1]] normalizer = Normalizer(norm='l1') print(normalizer.transform(X)) test_Normalizer()
输出结果:
[[ 0.06666667 0.13333333 0.2 0.26666667 0.33333333] [ 0.33333333 0.26666667 0.2 0.13333333 0.06666667] [ 0.2 0.2 0.2 0.2 0.2 ] [ 0.2 0.2 0.2 0.2 0.2 ]]
将norm参数调整为l2 会收敛得更快
5.过滤式特征选择
[code]#1.方差选择法 #使用方差作为特征评分标准 如果某个特征的取值差异不大 通常认为该特征对区分样本的贡献度不大 #因此 在构造特征的过程中去掉方差小于阈值的特征 from sklearn.datasets import load_iris iris = load_iris() #print('特征名称',iris.feature_names) #print('特征矩阵',iris.data) from sklearn.feature_selection import VarianceThreshold vt = VarianceThreshold(threshold = 1) #方差的阈值 默认0 vt = vt.fit_transform(iris.data) #print(vt)#只保留了第三列的特征 其他的都去掉了 #单变量 该列与标签列的相关度 #分类问题采用卡方检验 作为特征评分标准 #值越大 相关性越强 回归问题可以使用皮尔逊相关系数 from sklearn.datasets import load_iris from sklearn.feature_selection import SelectKBest#选前k个最好的 from sklearn.feature_selection import chi2 #卡方检验 skb = SelectKBest(chi2,k=2) new_data = skb.fit_transform(iris.data,iris.target) print(new_data)#保留了第三列和第四列 from sklearn.datasets import load_iris iris = load_iris() from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr #皮尔逊相关系数 from numpy import array skb = SelectKBest(lambda X,Y:tuple(map(tuple,array(list(map(lambda x:pearsonr(x,Y),X.T))).T)),k=3) skb = skb.fit_transform(iris.data,iris.target) print(skb)#保留三个特征
6.包裹式特征选择
反复的构建模型 然后选择最好的或最坏的 可以根据系数来选
把选出来的特征选择出来 然后在剩余的特征上重复这个过程 直到所有的特征都遍历
这个过程中被消除的次数就是特征的排序 因此这是一张寻找最优特征子集的贪心算法
[code]from sklearn.svm import LinearSVC #选择一个模型 from sklearn.datasets import load_iris #加载数据集 from sklearn.feature_selection import RFE #特征选择的方法 # step -- 默认1,即每次迭代移除一个特征 # verbose = 1 # 显示中间过程 iris = load_iris() x = iris.data y = iris.target estimator = LinearSVC() #特征集中剩余的特征个数 n_features_to_select=2 selector = RFE(estimator=estimator,n_features_to_select=2,verbose = 1 ) selector.fit(x,y)
输出:
Fitting estimator with 4 features. Fitting estimator with 3 features.
Out[9]:
RFE(estimator=LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True, intercept_scaling=1, loss='squared_hinge', max_iter=1000, multi_class='ovr', penalty='l2', random_state=None, tol=0.0001, verbose=0), n_features_to_select=2, step=1, verbose=1)
[code]print('特征数',selector.n_features_) #2 print('特征评分',selector.ranking_) #特征评分 [3 1 2 1]
阅读更多
相关文章推荐
- 使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 数据预处理(2)—— One-hot coding 独热编码#分别使用 pandans.dummies 和 sklearn.feature_extraction.DictVectorizer 进行处理
- 使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 使用sklearn进行数据预处理 —— 标准化/归一化/正则化
- 使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- sklearn学习:使用sklearn进行特征选择(未完)
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
- 特征选择——卡方检验(使用Python sklearn进行实现)