scikit-learn机器学习笔记——特征选择,特征降维

scikit-learn机器学习笔记——特征选择,特征降维

  • 特征选择
    • 特征选择是什么
    • 特征选择原因
    • 特征选择的主要方法
    • scikit-learn特征选择API
    • Filter(过滤式) API
      • VarianceThreshold语法
  • 特征降维
    • sklearn降维API
    • PCA(主成分分析)
      • PCA语法
      • PCA案例:用户对物品类别的喜好细分降维

特征选择

特征选择是什么

  特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。

特征选择原因

  • 冗余:部分特征的相关度高,容易消耗计算性能
  • 噪声:部分特征对预测结果有负影响

特征选择的主要方法

  • Filter(过滤式):VarianceThreshold
  • Embedded(嵌入式):正则化、决策树
  • Wrapper(包裹式)

scikit-learn特征选择API

sklearn.feature_selection

Filter(过滤式) API

sklearn.feature_selection.VarianceThreshold

VarianceThreshold语法

  • VarianceThreshold(threshold = 0.0)
    • 删除所有低方差特征。
  • Variance.fit_transform(X)
    • X:numpy array格式的数据[n_samples,n_features]。
    • 返回值:训练集差异低于threshold的特征将被删除。
    • 默认值是保留所有非零方差特征,即删除所有样本。
    • 中具有相同值的特征。

代码示例:方差过滤

from sklearn.feature_selection import VarianceThreshold

def var_fil(X):
    '''
    删除低方差特征
    :param X:
    :return:None
    '''
    print(X)
    #实例化
    var_ = VarianceThreshold(threshold=0)
    #转换数据
    data = var_.fit_transform(X)
    print(data)

    return None


if __name__ == '__main__':
    X = [[1,2,3,5],[1,5,9,5],[1,3,5,5]]
    var_fil(X)
[[1, 2, 3, 5], [1, 5, 9, 5], [1, 3, 5, 5]]
[[2 3]
 [5 9]
 [3 5]]

特征降维

sklearn降维API

sklearn. decomposition

PCA(主成分分析)

  本质:PCA是一种在尽可能多的保留原始数据方差的条件下,分析、简化数据集的技术。
  目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
  作用:可以削减回归分析或者聚类分析中特征的数量。

  高维度数据容易出现的问题:特征之间通常是线性相关的。

PCA语法

  • PCA(n_components=None)
    • 将数据分解为较低维数空间。
  • PCA.fit_transform(X)
    • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后指定维度的array。

代码示例:PCA降维

from sklearn.decomposition import PCA

def pca_fea(X):
    '''
    降维
    :return:None
    '''
    print(X)
    #实例化
    pca_de = PCA(n_components=0.9)
    #转换数据
    data = pca_de.fit_transform(X)
    print(data)


if __name__ == '__main__':
    X = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]
    pca_fea(X)

PCA案例:用户对物品类别的喜好细分降维

代码示例:生成user_id对aisle的交叉表,发现表是很稀疏的,且部分属性高度相关,因此可以用pca降维。

代码示例:

import pandas as pd
from sklearn.decomposition import PCA
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

aisles = pd.read_csv('./aisles.csv')
prior = pd.read_csv('./order_products__prior.csv')
orders = pd.read_csv('./orders.csv')
products = pd.read_csv('./products.csv')



mg1 = pd.merge(aisles, products, left_on='aisle_id',right_on='aisle_id')

mg2 = pd.merge(mg1, prior, left_on='product_id', right_on='product_id')

mg3 = pd.merge(mg2, orders, left_on='order_id', right_on='order_id')

cross = pd.crosstab(mg3['user_id'], mg3['aisle'])

print(cross.head(5))
print(cross.shape)

pca = PCA(n_components=0.9)
pca_cross = pca.fit_transform(cross)

print(pca_cross.shape)


corr = cross.corr()
f, ax= plt.subplots(figsize = (14, 10))
sns.heatmap(corr,cmap='RdBu', linewidths = 0.05, ax = ax)
ax.set_title('Correlation between features')
plt.show()


f.savefig('sns_style_origin.jpg', dpi=100, bbox_inches='tight')

你可能感兴趣的:(机器学习,scikit-learn)