ML入门1

ML入门1

记录我看黑马三天入门ML的第一天,看完黑马,准备再去啃西瓜书!

一.数据集使用

先要安装sklearn相关的库,我pycharm配置的是anaconda的环境,所以直接在anaconda中配置了sklearn的库。sklearn包含的算法有:Classification(分类)、Regression(回归)、Clustering(聚类)、Dimensionality redution(降维)、Model selection(模型选择) 、Preprocessing(特征工程)

1.数据集的读取

加载获取小规模数据集,数据包含在datasets中。

sklearn.datasets.load_*();

获得大规模数据集,数据需要从网上下载,函数第一个参数是data_home,表示数据集下载目录,有默认值。

sklearn.datasets.fetch_*(data_home)

例:获取鸢尾花数据集(返回的是字典)

import sklearn
def dataset_demo():
    from sklearn import datasets
    #获取数据集
    iris=sklearn.datasets.load_iris()
    print("鸢尾花数据集:\n",iris)
    print("查看数据集描述:\n",iris["DESCR"])
    return None
dataset_demo()#返回的是字典

2.数据集的返回值

读取数据集以后可以详细观看。
load和fetch返回的数据类型是datasets.base.Bunch(字典格式)
(1)data:特征数据数组,是[n_samples*n_features]的二维numpy.ndarray数组
(2)target:标签数组,是n_samples的一维numpy.ndarray数组
(3)DESCR:数据描述
(4)feature_names:特征名
(5)target_names:标签名

3.数据集的划分

训练数据:用于训练,构建模型
测试数据:模型检验,用于评估模型是否有效,占数据集20%~30%

数据的划分api

def train_test_split(*arrays,
                     test_size=None,
                     train_size=None,
                     random_state=None,
                     shuffle=True,
                     stratify=None):
    """Split arrays or matrices into random train and test subsets子集合
 
    Quick utility that wraps input validation and
    ``next(ShuffleSplit().split(X, y))`` and application to input data
    into a single call for splitting (and optionally subsampling) data in a
    oneliner.
 
    Read more in the :ref:`User Guide `.
 
    Parameters
    ----------
    *arrays : sequence of indexables with same length / shape[0]
        Allowed inputs are lists, numpy arrays, scipy-sparse
        matrices or pandas dataframes.
 
    test_size : float or int, default=None
        If float, should be between 0.0 and 1.0 and represent the proportion
        of the dataset to include in the test split. If int, represents the
        absolute number of test samples. If None, the value is set to the
        complement of the train size. If ``train_size`` is also None, it will
        be set to 0.25.
 
    train_size : float or int, default=None
        If float, should be between 0.0 and 1.0 and represent the
        proportion of the dataset to include in the train split. If
        int, represents the absolute number of train samples. If None,
        the value is automatically set to the complement of the test size.
 
    random_state : int, RandomState instance or None, default=None
        Controls the shuffling applied to the data before applying the split.
        Pass an int for reproducible output across multiple function calls.
        See :term:`Glossary `.
 
 
    shuffle : bool, default=True
        Whether or not to shuffle the data before splitting. If shuffle=False
        then stratify must be None.
 
    stratify : array-like, default=None
        If not None, data is split in a stratified fashion, using this as
        the class labels.
        Read more in the :ref:`User Guide `.
 
    Returns
    -------
    splitting : list, length=2 * len(arrays)
        List containing train-test split of inputs.
 
        .. versionadded:: 0.16
            If the input is sparse, the output will be a
            ``scipy.sparse.csr_matrix``. Else, output type is the same as the
            input type.
 
    Examples
    --------
    >>> import numpy as np
    >>> from sklearn.model_selection import train_test_split
    >>> X, y = np.arange(10).reshape((5, 2)), range(5)
    >>> X
    array([[0, 1],
           [2, 3],
           [4, 5],
           [6, 7],
           [8, 9]])
    >>> list(y)
    [0, 1, 2, 3, 4]
 
    >>> X_train, X_test, y_train, y_test = train_test_split(
    ...     X, y, test_size=0.33, random_state=42)
    ...
    >>> X_train
    array([[4, 5],
           [0, 1],
           [6, 7]])
    >>> y_train
    [2, 0, 3]
    >>> X_test
    array([[2, 3],
           [8, 9]])
    >>> y_test
    [1, 4]
 
    >>> train_test_split(y, shuffle=False)
    [[0, 1, 2], [3, 4]]
 
    """

4.特征工程

(1)为什么需要特征工程(Feature Engineering)
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已

(2) 什么是特征工程
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。会直接影响机器学习的效果。

(3)特征工程的位置与数据处理的比较
pandas:一个数据读取非常方便以及基本的处理格式的工具。用于数据清洗、数据处理

sklearn:对特征的处理提供了强大的接口。用于特征工程

特征抽取/特征提取/特征值化,特征预处理,特征降维

(4)特征抽取/特征提取/特征值化
学习目标:
应用DictVectorizer实现对类别特征数值化、离散化
应用CountVectorizer实现对文本特征数值化
应用TfidfVectorizer实现对文本特征数值化
说出两种文本特征提取方式的区别
无应用
(5)为什么要特征提取?什么是特征提取?
用机器学习算法对数据集进行学习,机器学习算法实际上一些统计方法(数学公式),是不能处理字符串、文本、图像的,需要转换为可用于机器学习的数字特征。

  • 字典特征提取(特征离散化)
  • 文本特征提取
  • 图像特征提取(深度学习 )

(6)特征提取API

sklearn.feature_extraction

The sklearn.feature_extraction module deals with feature extraction from raw data. It currently includes methods to extract features from text and images.

字典特征提取

作用:对字典数据进行特征值化

1 API

sklearn.feature_extraction.DictVectorizer(*, dtype=, separator='=', sparse=True, sort=True)
  • 将特征值映射列表转换为向量
  • 该转换器将特征名称到特征值的映射列表(类似字典的对象)转换为 Numpy 数组或 scipy.sparse 矩阵,以便与scikit-learn 估计器一起使用。
  • 当特征值是字符串时,此转换器将执行二进制 one-hot(又名 one-of-K)编码:为该特征可以采用的每个可能的字符串值构造一个布尔值特征(为了公平)。例如,可以采用值“ham”和“spam”的特征“f”将成为输出中的两个特征,一个表示“f=ham”,另一个表示“f=spam”。
  • 如果特征值是一个序列或一组字符串,则此转换器将迭代这些值并计算每个字符串值的出现次数。
  • 但是,请注意,当特征值为字符串类型时,此转换器只会执行二进制 one-hot 编码。
  • 如果分类特征表示为数值,例如 int 或字符串的可迭代,则可以使用 DictVectorizer OneHotEncoder来完成二进制
    one-hot 编码。
  • 样本(映射)中未出现的特征将在结果数组/矩阵中具有零值。
  • 返回一个稀疏矩阵(sparse),只显示非0值
    应用场景:
    (1)pclass,sex 数据集类别特征较多
    =>将数据集特征转换为字典类型
    =>DictVectorizer转换
    (2)数据集本身就是字典类型
    直接抽取

文本特征提取

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

sklearn.feature_extraction.text.CountVectorizer(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None停用词, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=)

停用词指的是在特征提取的时候,不提取的词。
关键词:在某一个类别文章中,出现很多,在其他类别文章中,出现很少。

Tf-idf文本特征提取

(1)TF-IDF主要思想:如果某个词或短语在一篇文章中出现概率较高,并且在其他文章中很少出现,则认为此词或者是短语具有良好的类别区分能力,适合用来分类。
(2)TF-IDF作用:用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
(3)TD——词频=词语出现次数/总词数
(4)IDF——逆向文档频率=lg(总文件数目/包含该词语文件数目)
例:
1000篇文章——语料库
100篇文章——“非常”
10篇文章——“经济”
两篇文章:
文章A(100词):10次“经济” TF—IDF:0.12=0.2
TF:10/100 =0.1 IDF:lg(1000/10)=2
文章B(100词):10次“非常” TF—IDF:0.1
1=0.1
TF:10/100 =0.1 IDF:lg(1000/100)=1
故而“经济”对语料库中的文章分类更重要(个人觉得在一篇文章内比较觉得比较好)

API

sklearn.feature_extraction.text.TfidVectorize(stop_words = None...)
  • 返回词权重矩阵
    • TfidVectorizerfit_transform(X)
    • X:文本或者包含文本字符串的可迭代对象
    • 返回值:返回sparse矩阵
    • TfidVectorizer.inverse_transform(X)
    • X:array数组或者sparse矩阵
    • 返回值:转换之前的数据格式
    • TfidVectorizer.get_feature_names()
    • 返回值:单词列表

5.特征预处理

(1)什么是特征预处理?
通过一些转换函数将特征数据转换成更适合算法模型的特征数据过程
(2)包含内容

  • 数值型数据的无量纲化
    • 归一化
    • 标准化
      (3)为什么要对数据进行归一化,标准化?

特征预处理API

sklearn.preprocessing

归一化

(1)定义
通过对原始数据进行变换把数据映射到(默认为[0,1]之间)
(2)计算
X1 = (x - min)/(max-min)
X2 = X1*(mx - mi)+ mi
=>mx,mi分别为指定区间值,默认mx为1,mi为0

归一化 API

sklearn.preprocessing.MinMaxScaier(feature_range =(0,1)...)
  • feature_ranges默认在[0,1]之间,可以自己设置
  • .MinMaxScaier.fit_transform(X)
    • X:numpy array格式的数据[n_samples,n_features]
  • 返回值:转换后形状相同的array
    (3)归一化的缺点
    归一化方式,鲁棒性较差,一般在精确的小数据场景使用,因为归一化在计算时候使用了max与min,如果最大值和最小值是异常值的话,那么数据的归一化就会出现问题。

标准化

(1)定义
通过对原始数据进行变化,把数据变换到均值为0,标准差为1的范围内。
(2)计算
X1 = (x-mean(均值))/β(标准差)

标准化API

sklearn.preprocessing.StandardScaler()
  • StandardScaler.fit_transform(X)
    • X:numpy array格式数据
    • 返回值:形状相同的array

(3)适用于对大数据的处理,如果出现异常点,少量异常点对均值与标准差影响不大

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