机器学习基础篇_1/2

caid

分类: 人工智能、学习笔记 81 0

概述

机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测。

数据集的构成

存储类型:文件格式(如csv)

  1. 可用的数
  • scikit-learn
  • Kaggle
  • UCI
  1. 常用数据集数据的结构组成

    结构:特征值 + 目标值

    处理:

  • pandas:一个数据读取非常方便以及基本的处理格式的工具
  • sklearn: 对于特征的处理提供了强大的接口

特征工程

概念

将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对位置数据的预测准确性

意义

直接影响预测结果

工具

scikit-learn 库

安装:pip3 install Scikit-learn (需安装pandas)

特征抽取

字典特征抽取

  • 文字 –> 提取数据

  • 方法:

from sklearn.feature_extraction import DictVectorizer
d = DictVectorizer(sparse=True)
  1. DictVectorizer.fit_transform(x)
  • X: 字典或者包含字典的迭代器

  • 返回值:返回sparse矩阵

    返回的字典中包含:对于非数字的字段以’字段名=字段值’的形式

    ​ 对于数字的字段以’字段名’的形式

  1. DictVectorizer.inverse_tranform(x)
  • X: array数组或者sparse矩阵
  • 返回值:转换之前数据格式(即就是字典类型的列表)
  1. DictVectorizer.get_feature_names()
  • 返回类别名称
  1. DictVectorizer.transform(x)
  • 按照原先的标准转换

文本特征抽取

  • 作用:对文本数据进行特征化

  • 类:sklearn.feature_extraction.text.CountVectorizer

    函数:c = CountVectorizer()

    • fit_tramsform(x)

    • X: 文本或包含文本字符串的可迭代对象

    • 返回值:返回sparse矩阵

    返回值有toarray()方法可转化为数组,数组中的值是每个单词在每篇文章中出现的次数,其中单个字母t不统计

    • inverse_transform(x)

    • X: array数组或者sparse矩阵

    • 返回值:转换之前数据格式

    • get_feature_names()

    • 返回单词列表,重复的只显示一次

  • 分词(JieBa分词)

    默认情况:将每篇文章按空格进行分词,因此,对于文章数据需提前分词,并通过空格分隔。

    注:单个汉字不计数

    JieBa分词:

    import jieba
    def cutword(source_text):
      c = jieba.cut(source_text)
      content_list = list(c)
      # 把列表转换成字符串
      res = ' '.join(content_list)
      return res
    
  • 文本分类
    • tf(term frequency): 词的频率

    • idf(inverse document frequency):逆文档频率 log(总文档数量/该词出现的文档数量)

    • 重要性程度:

    重要性 = tf * idf

  • TF-IDF

    类:sklearn.feature_extraction.text.TfidfVectorizer

    函数:c = TfidfVectorizer(stop_words=None)返回词的权重矩阵

    • fit_transform(x)
    • X: 文本或包含文本字符串的可迭代对象
    • 返回值:返回sparse矩阵
    • inverse_transform(x)
    • X: array数组或者sparse矩阵
    • 返回值:转换之前数据格式
    • get_feature_names()
    • 返回单词列表,重复的只显示一次

数据的处理方式

  • 数值型:标准的缩放
    • 归一化
    • 标准化
    • 缺失值
  • 类别型:one-hot编码

  • 时间型:时间的切分

归一化

特点

通过对原始数据进行变换把数据映射到(默认为[0, 1])之间。

在多个特征同等重要时使用。因为在这中情况下,在计算过程中,如果某一项的值特别大,则对于结果的影响也 会特别大,从而使得各个特征之间达不到同等重要的效果,因此需要归一化到统一级别下进行计算,这样才能达到多个特征同等重要的效果。

公式

$$
X’ = \frac{x-min}{max-min}
$$

$$
X” = X’ * (mx-mi)+mi
$$

其中:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’‘ 为最终结果,mx,mi分别为指定区间值,默认为mx=1,mi = 0。

API

类:sklearn.preprocessing.MinMaxScaler

用法: mms = MinMaxScalar9feature_range={0, 1})

函数:fit_transform(X) 其中X为numpy

array格式的数据[n_samples, n_features],是二维数组 。返回值为转换后的形状

异常点

影响:max、min

标准化

特点

通过对原始数据进行交换吧数据交换到均值为0, 标准差为1范围内

公式

$$
x’ = \frac{(x-mean)}{\sigma}
$$

注:作用于每一行,mean为平均值,var为方差,
$$
var=\frac{(x1-mean)^2+(x2-mean)^2+..}{n}
$$

$$
\sigma = \sqrt var
$$

方差考量的是数据的稳定性。

异常点

影响:平均值的影响并不大,从而方差改变较小。

API

类:scikit-learn.preprocessing.StandarScaler 处理之后每列来说所有数据都聚集在均值0附近,标准差为1。

函数:

  • StandardScaler.fit_transform(X)
    • X: numpy array 格式的数据[n_samples, n_features]
    • 返回值:转换后的形状相同的array
  • StandardScaler.mean_ 原始数据中每列特征的平均值
  • StandardScaler.std_ 原始数据每列特征的方差

特征选择

数据降维:维度是指特征的数量。

概念

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

方法

  • Filter
    • 过滤式:VarianceThreshold Variance是方差

    • 方差大小:考虑所有样本中特征的数据情况,方差为0,则所有值都一样。

    • 用法:删除所有低方差特征,threshold为要删除的方差的值。

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

    嵌入式:正则化、决策树

  • Wrapper

    包裹式

  • 神经网络

  • 2人 Love
  • 0人 Haha
  • 0人 Wow
  • 0人 Sad
  • 0人 Angry
人工智能、机器学习

作者简介:caid

共 0 条评论关于 “机器学习基础篇_1/2”

Loading...