人工智能知识点-特征工程,线性回归,朴素贝叶斯等

sklearn

Posted by AiMetaNetworks on September 12, 2020
本页面总访问量

人工智能实训知识点小结 - milestone 1

  • 特征工程的意义和作用

    • 特征工程
      • 样本数据中可能有缺失值、异常值、空值
    • 特征工程的意义
      • 进行特征工程,可以直接影响模型预测的结果
    • 特征工程的作用
      • 数据集提纯,因为数据集月纯净越能让模型总结出数据集中潜在的规律
    • 让模型基于这组数据有更好的预测能力
  • 不同形式的特征工程

    • 特征预处理

      • 无量纲化

        • 加速以梯度、矩阵为核心的算法(逻辑回归,SVM,神经网络等)
        • 距离型的入K近邻、K-Means聚类中,提升模型经度,避免某一个取值范围特别多的特征对距离计算造成影响

        • [特例]决策树不需要无量纲化,可以把任意数据都处理得很好
      • 方法

        • 归一化

          • 归一化的数据服从正态分布

          API:from sklearn.preprocessing import MinMaxScaler

          • 参数:feature_range表示缩放范围,通常使用(0,1)

          使得某一特征对最终结果不会造成很大影响

          \[X'=\frac{x-min}{max-min} \\ X'' = X' \times (mx-mi) + mi \\ max,min\mbox{表示为某列的最大值,}mx,mi\mbox{表示为指定缩放区间,若为0-1则}mx=1,mi=0\]
        • 注意:如果出现了异常值则会响应特征的最大最小值,那么最终结果会受到比较大影响

        • 标准化

          • 如果出现异常点,由于具有一定的数据量,少量的异常点对于平均值的影响并不大,从而标准差改变比较少。

          • 公式

          • 标准化API:from sklearn.preprocessing import StandardScaler

            • fit_transform(X):对X进行标准化
            • mean_:均值 > - var_:方差
      \[X' = \frac{x-mean}{\sigma} \\ \sigma = \sqrt{var} \\ var = \frac{(x1-mean)^2+(x2-mean)^2}{n\mbox{(每个特征的样本数)}}\]
      • 一般情况下回归问题是不需要进行无量纲化操作的
  • 特征选择

    • 原因

      • 部分特征相关度高,容易消耗计算机的性能
      • 部分特征对预测结果有偏执影响
    • 实现

      • 人为舍弃

      • Filter过滤式

        • 优先消除方差为0或者方差很低的数据

          • 实际操作中可以取方差中位数,可以去除方差低的一半特征
          • API:from sklearn.feature_selection import VarianceThreshold
          • VarianceThreshold(threshold=x)threshold方差的值,删除所有方差低于x的特征,默认值为0表示保留所有方差为非0的特征
          • fit_transform(X)#:X为特征
      • Embedded嵌入式

      • PCA降维

        • 实例原理图

        • 红色为原始的样本特征,为二维的特征,如果降为一维,则可以将5个红色的原始特征,映射到一维的线段上就变成了4个特征。

          • from sklearn.decomposition import PCA
          • pca = PCA(n_components=None)
            • n_components可以为小数(保留特征的百分比),整数(减少到的特征数量)
          • pca.fit_transform(X)

          示例

  • KNN分类模型

    • K值较小,则模型复杂度较高,容易发生过拟合,学习的估计误差会增大,预测结果对近邻的实例点非常敏感。

    • K值较大可以减少学习的估计误差,但是学习的近似误差会增大,与输入实例较远的训练实例也会对预测起作用,使预测发生错误,k值增大模型的复杂度会下降。

    • 在应用中,k值一般取一个比较小的值,通常采用交叉验证法来来选取最优的K值。

    • 预测电影类型示例

    • 适用于样本为几千、几万的小数据场景

    • 在KNN中,标签数据是否可用为非数值型数据

      • 可以,因为KNN中标签数据不参与运算

      • 可以,可以对其进行特征值化

        • 特征值化

          • pandas.get_dummies(data[row])

            可以生成one hot编码,与源数据列连接(pandas.concat(data1,data2,axis=1))

  • 什么是交叉验证,其作用是什么?

    • 把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。

    • 作用

      • 为了得到可靠稳定的模型
    • 例子:K折交叉验证

      • 选出最为适合的模型超参数的取值,然后将超参数的值作用到模型的创建中。

        • from sklearn.model_selection import cross_val_score
        • cross_val_score(estimator,X,y,cv):
          • estimator:模型对象
          • X,y:训练集数据
          • cv:折数
  • 简述线性回归模型的回归原理

    • 作用
    • 找出特征和目标之间存在的某种趋势(在二维平面中,该种趋势可以用一条线段来表示)
    • 原理
      • 回归算法就是在不断的自身迭代的减少误差来使得回归算法的预测结果可以越发的逼近真实结果
  • 线性回归是如何求解最小误差的?

    • 通过损失函数来表示误差
    • 通过改变权重值,通过迭代得到最小误差
    • 具体求解见下SSE&RSS
  • 回归模型的评价指标有哪些

    • 是否预测到了正确或者接近正确的数值

      • MSE(均方误差)(mean squared error)

        • \[MSE = \frac{1}{m}\sum_{i=1}^{m}(y_i-\hat{y}_i)^2\]
        • 在sklearn当中,我们有两种方式调用这个评估指标:

          • 一种是使用sklearn专用的模型评估模块metrics里的类mean_squared_error
          • 另一种是调用 交叉验证的类cross_val_score并使用里面的scoring参数来设置为:neg_mean_squared_error使用均方误差。
      • MAE 绝对值误差(Mean Absolute Error)

        • \[MAE = \frac{1}{m}\sum_{i=0}^{m-1}\|y_i - \hat{y}_i\|\]
        • 其表达的概念与均方误差完全一致,不过在真实标签和预测值之间的差异外我们使用的是L1范式(绝对值)。现实使 用中,MSE和MAE选一个来使用就好了。

          • 在sklearn当中,我们使用命令
            • from sklearn.metrics import mean_absolute_error来调用MAE,
          • 同时,我们也可以使用交叉验证中的
            • scoring = “neg_mean_absolute_error”, 以此在交叉验证时调用MAE。
    • 是否拟合到了足够的信息

      • 像下图这种单调性等无法被MSE这些内容捕捉

        • 方差可以用来衡量还没有捕获的信息量

        • 定义:

          \[R^2 = 1- \frac{\sum_{i=0}^m(y_i-\hat{y}_i)^2}{\sum_{i=0}^{m}(y-\overline{y})^2} = 1- \frac{RSS}{\sum_{i=0}^{m}(y-\overline{y})^2}\]
          • 式子下方为y的方差,方差越大表示信息量越大,RSS则为模型未捕捉到的信息量(差值)。故$R^2$越接近与1越好。

            • 可以使用三种方式来调用

              • 一种是直接从metrics中导入r2_score,输入预测值和真实值后打分。
              • 第二种是直接从 线性回归LinearRegression的接口score来进行调用。
              • 第三种是在交叉验证中,输入”r2”来调用。
  • 线性回归的损失函数如何表示?

    • 表示1 \(\begin{aligned} J(\theta) &= (h_w(x_1)-y_1)^2 + (h_w(x_2)-y_2)^2 + ...+(h_w(x_m)-y_m)^2\\ &= \sum_{i=1}^m(h_w(x_i)-y_i)^2 \end{aligned}\)

    • 表示2

    • \[\sum_{i=1}^m(y_i-\hat{y}_i)^2 = \sum_{i=1}^{m}(y_i-X_i\omega)^2\]
      • yi:为第i个训练样本的真实值
      • hw(xi):预测值
        • 误差的大小和我们线性回归方程中的哪个系数有直系的关联呢?∂
  • 是不是损失函数返回的损失值越小越好呢?

    • 不是。还要看模型跑测试集的准确率
  • L0,L1和L2范式

    • Lx定义
      • L0:指向量中非0的元素个数
      • L1:指向量中各个元素绝对值之和
      • L2:指向量个元素的平方和然后求平方根
        • 本质是就是欧式距离
  • SSE&RSS

    • 式子即为L2范式的平方,称之为Sum of Squared Error(误差平方和)或者Residual Sum of Squares。

      • 顺便学个单词(🌫)
    • 通过最小化真实值和预测值之间的RSS来求解参数的方法叫做最小二乘法

      • 求导,并使导数为0

      • \[\begin{aligned} \frac{\partial RSS}{\partial \omega} &= \frac{\partial \|\|y-X\omega \|\|_2^2}{\partial \omega} \\ &=X^TX\omega - X^Ty \end{aligned}\]

        求导用到了一下性质:

      • 这样就可以求出最小误差下的$\omega$的值了

      • 最小二乘(正规方程):from sklearn.linear_model import LinearRegression

        normalize为归一化,如果要标准化则需要在训练模型前进行对数据进行标准化处理

  • 简述什么是过拟合和欠拟合?

    • 过拟合:一个假设在训练数据上不能获得很好的拟合,但是在训练数据以外的数据集上也不能很好的拟合数据,此时认为这个假设出现了欠拟合的现象。
      • 原因:模型学习到的样本的特征太少
      • 解决:增加样本的特征数量(多项式回归)
    • 欠拟合:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据以外的数据集上却不能很好的拟合数据,此时认为这个假设出现了过拟合现象。
      • 原因:原始特征过多,存在一些嘈杂特征
      • 解决:进行特征选择(很难做),正则化之岭回归
  • 岭回归

    • 即为带有正则化算法的回归模型(Ridge岭回归)

    • 使用岭回归可以通过控制正则化力度参数alpha降低高次项特征的权重

    • 优点

      • 获取的回归系数更符合实际,更可靠
      • 在异常值多的数据偏多的研究中有更大的存在意义
      • API:from sklearn.linear_model import Ridge
      • Ridge(alpha=1.0):
        • alpha:正则化的力度,力度越大,则表示高次项的权重w越接近于0,导致过拟合曲线的凹凸幅度越小。
          • 取值:0-1小数或者1-10整数
        • coef_:回归系数
  • 简述什么是多项式回归?

    • 将特征进行组合,形成一个新特征参与运算,相当于从y=ax+b到y=ax^2+bx+c

      • from sklearn.preprocessing import PolynomialFeatures

        • degree:控制多项式的度
        • interaction_only: 默认为False,如果指定为True,上面的二次项中没有a^2和b^2。
        • include_bias:默认为True。如果为False的话,那么就不会有上面的1那一项
  • 简述什么是先验概率和后验概率?

    • 先验概率
    • 不管有没有其他事件发生时造成结果的原因
    • 后验概率/条件概率
    • 当准备出门前,听到新闻里说路上发生了交通事故,那现在计算在发生事故后堵车的概率就是后验概率。也就是P(堵车 交通事故)。这是由因求果。
  • 简述高斯函数的作用

    • 高斯分布也就是正态分布,是一种在自然界大量的存在的、最为常见的分布形式。 现实生活中有很多现象均服从高斯分布,比如收入,身高,体重等,大部分都处于中等水平,特别少和特别多的比例都会比较低。
    • 高斯分布就是当频率直方图的区间变得特别小时的拟合曲线,像座小山峰,其中两端的特别小,越往中间越高。
    • 因此可以使用高斯函数求出某种可能性的比重,适用于样本分类
  • 简述高斯模型的大致分类原理

    • 通过假设P(xi Y)是服从高斯分布(也就是正态分布),来估计训练集数据的每个样本特征分到每个类别Y上的条件概率。
      • 通过不断最小化$P(x_i|y)$来调整$x_i$权重
    • 高斯模型API

      • from sklearn.naive_bayes import GaussianNB

        • 参数:
          • prior:默认值表示自行根据数据计算先验概率。
        • 成员函数
          • predict
            • 直接预测类型
          • predict_proba
            • 预测各个类型的概率
          • predict_log_proba
            • 预测各个类型的概率对数,通常在概率普遍相差很小时使用ß
  • 简述多项式模型的大致分类原理

    • 多项式主要适用于离散特征的概率计算

    • 主要含有

      • 高斯模型

        • 主要适用于连续型计算
      • 多项式模型

        • 主要适用于离散值计算

        • 主要:sklearn中的多项式模型不支持负值,故需要对数据进行归一化

        • 若出现某个类别的概率为0,肯定不合适。可以使用”拉普拉斯平滑系数“

          • $P(F_1|C)=\frac{Ni+\alpha}{N+\alpha m}$
            • 此处$\alpha$一般为1,m为训练文档中统计出的特征词的个数
            • 举例:$N_i$为$F1$词在$C$类别下所有文档出现的次数。$N$为所属类别C下的文档所有词出现的次数和
            • $P(C)$:每个文档类别的概率
            • $P(W|C)$:给定类别下特征的概率,此处的特征就是预测文档中出现的词语
        • 使用

          • 多项式朴素贝叶斯API

            • from sklearn.naive_bayes import MultinomialNB
            • MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
              • alpha:拉普拉斯平滑系数
      • 伯努利模型BernoulliNB

        • 专门用来处理二项分布的朴素贝叶斯

        • 数据集中可以存在多个特征,但每个特征都是二分类的

          • class sklearn.naive_bayes.BernoulliNB (alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
          • 参数介绍:
            • alpha:拉普拉斯平滑系数
            • binarize:可以是数值或者不输入。如果不输入,则BernoulliNB认为每个数据特征都已经是二元(二值化)的。否则的话,小于binarize的会归为一类,大于binarize的会归为另外一类
    • 评价

      • 优点
        • 发源于古典数学理论,有稳定的分类效率
        • 对缺失数据不太敏感,算法简单
        • 分类准确度高,速度快
      • 缺点
        • 样本属性有联系时,效果不好
  • 特征选择的方式有哪些?进行简单介绍

    • 人为舍弃

    • Filter过滤式

      • 优先消除方差为0或者方差很低的数据

        • 实际操作中可以取方差中位数,可以去除方差低的一半特征
        • API:from sklearn.feature_selection import VarianceThreshold
        • VarianceThreshold(threshold=x)threshold方差的值,删除所有方差低于x的特征,默认值为0表示保留所有方差为非0的特征
        • fit_transform(X)#:X为特征
    • Embedded嵌入式

    • PCA降维

      • 主成分分析。削减回归分析或者聚类分析中特征的数量

        • from sklearn.decomposition import PCA
        • pca = PCA(n_components=None)
          • n_components可以为小数(保留特征的百分比),整数(减少到的特征数量)
        • pca.fit_transform(X)
  • 如何进行无量纲化?和其意义是什么?

    • 见之前的回答
  • 简述什么是特征值化,为什么需要进行特征值化?

    • 将非数值型的数据转化为可供模型计算的数值型数据
    • 加入运算
  • 难点:在交叉验证中,k值设置的比较大会导致什么现象发生?

    • K值较大可以减少学习的估计误差,但是学习的近似误差会增大,与输入实例较远的训练实例也会对预测起作用,使预测发生错误,k值增大模型的复杂度会下降。