ML入门2

ML入门2

二.特征工程

1.特征提取

2.特征预处理

3.特征降维

3.1什么是降维

可以参考数据分析时候的数组降维,将二维数组转换为一维数组,这里降低的是嵌套层数。而特征的降维,是降低特征的个数。

3.2特征降维

(1)定义
在某些限定条件下,降低特征的个数,得到一组”不相关“主变量的过程。(即降维的效果是特征与特征之间不相关)

  • 相关特征:降雨量与相对湿度就是一组相关特征,相关特征会造成数据冗余。
  • 如果特征存在问题或者特征之间相关性较强,会对算法学习预测造成较大影响。

3.3降维的两种方式

  • 特征选择
  • 主成分分析(一种特征提取)

3.4特征选择

(1)定义
数据中包含冗余或者相关变量(特征,属性,指标等),目的是从原有特征中找到主要特征。
(2)方法

  • Filter(过滤式):主要探究特征本身特点、特征之间和目标值之间的关联
    • 方差选择法:一组数据,这组数据某一个特征方差较小(特征集中,也就是基本所有数据都有这一个特征,那么其就不是主要特征)低方差特征过滤。
    • 相关系数:衡量特征之间的相关程度。
  • Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)
    • 决策树:信息熵、信息增益
    • 正则化:L1、L2
    • 深度学习:卷积

3.5过滤式

3.5.1方差选择法

(1)API

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

3.5.3相关系数

(1)反映变量之间相关关系密切程度的统计指标。

  • 用于检验非相关性的 Pearson 相关系数和 p 值。
  • Pearson 相关系数衡量两个数据集之间的线性关系。p 值的计算依赖于每个数据集呈正态分布的假设。(有关 输入的非正态性对相关系数分布的影响的讨论,请参见 Kowalski 。)与其他相关系数一样,该系数在 -1 和 +1 之间变化,其中0 表示没有相关性。-1 或 +1 的相关性意味着精确的线性关系。正相关意味着随着 x 的增加,y 也会增加。负相关意味着随着 x增加,y 减少。
  • p 值粗略地表示不相关系统产生的数据集的概率,该数据集的 Pearson 相关性至少与从这些数据集计算出的数据集一样极端。

(2)API

scipy.stats.pearsonr( x , y )

(3)也可以通过绘制散点图来查看相关性
(4)特征与特征之间相关性很高的话,可以选取其中一个,或者加权(等权重)合成新的特征,或者进行主成分分析。

3.5.4主成分分析(PCA)

(1)定义
高维数据转化为低维数据的过程,在此过程中可能会舍弃原有的数据,创造新的变量。
(2)应用
回归分析或者聚类分析当中。
(3)作用
是数据压缩,尽可能降低原数据的维度(复杂度),损失少量信息。
(4)原理
找到一个合适的直线,通过一个矩阵运算得出主成分分析的结果

(5)API

sklearn.decomposition.PCA(n_components=None)
  • 将数据分解为较低维数的空间
  • n_components:
    • 小数:表示保留百分之多少的信息
    • 整数:减少到多少特征
  • PCA.fit_transform(X):numpy array格式的数据
  • 返回值:转换后指定维度的array

案例:探究用户对物品类别的喜好细分

需求分析:
(1)将用户user_id和物品类别aisle放在同一张表中。(合并表)
(2)找到user_id和aisle的关系。(交叉表与透视表)
(3)特征冗余过多——PCA降维。
例:见jupterbook

三.分类算法

1.sklearn转换器和估计器

1.1转换器

想一下之前做特征工程的步骤?

  • 实例化(实例化一个转化器类)
  • 调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)

我们把特征工程的接口称之为转换器,其中转换器调用有这么几种方式

  • fit_transform #由fit(),transform()两个方法封装而成
  • fit #计算每一列的平均值,标准差
  • transform #带入进行最终转换

1.2估计器

(1)定义:是一类实现了算法的API(机器学习中大部分算法被封装在了估计器中)
(2)工作流程
=>实例化一个estimator
=>estimator.fit(x_train,y_train)计算
=predict(x_test)进行模型评估,比对y_test与y_predict,或者使用estimator.score(x_test,y_test)计算准确率

2.KNN算法(K—近邻算法)

2.1原理

(根据邻居推断出你的类别。)如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

  • 距离公式:欧式距离,曼哈顿距离,明可夫斯基距离
  • K=1时,容易受异常的影响

2.2例子:电影分析

  • K值选取过大,容易受到样本不均衡的影响; K值选取过小,容易受到异常样本的影响;

2.3API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
  • n_neightbors:int,可选(默认 = 5),k_neightbors查询默认使用的邻居数
  • algorithm(算法):{’auto’,‘ball_tree’,‘kd_tree’,‘brute’},可用于计算最近邻居的算法:'ball_tree’将会使用BallTree,‘kd_tree’将使用KDTree。'auto’将尝试根据传递给fit方法的值来决定最合适的算法。

2.4鸢尾花种类预测

流程:
1.获取数据
2.数据集划分
3.特征工程:标准化
4.KNN预估器流程:实例化,调用
5.模型评估

3.模型选择与调优

3.1交叉验证

(1)什么是交叉验证
将拿到的训练数据分为训练集和验证集。

3.2超参数网格搜索——网格搜索

通常情况下,有很多参数需要手动指定,例如KNN中K的值,这种叫做超参数。但是手动指定过程复杂,需要提前对模型预设几种超参数组合,每组超参数采用交叉验证来进行评估,最后选出最优参数指定模型。

你可能感兴趣的:(机器学习,sklearn,python)