美文网首页
机器学习篇(二)

机器学习篇(二)

作者: 小新你蜡笔呢 | 来源:发表于2019-01-11 14:05 被阅读0次

    特征预处理:

    目的:方便我们下一步的处理。

    数值类数据:缩放:归一化,标准化,缺失值处理

    类别型数据:one-hot编码

    时间类型:时间的切分

    数值型数据之归一化

    什么是归一化?

    为了数据处理的方便和提取,把数据映射成0-1之间的数,更加方便。

    归一化的公式:x1 = (x-mix)/(max-min) x2 = x1*(mx-mi) + mi

    # 作用于每一列,max为一列的最大值,min为一列的最小值,mx,mi为指定区间值默认mx为1,mi为0

    # x2 为最终结果。使用默认值x1就为最终结果。

    什么时候用到归一化?

    当某些特征同等重要的时候,但是数值差别很大,会进行归一化处理。

    目的:来使之不受某一个特征的影响过大。

    缺点:对于异常点比如有个点更大更小,便宜过大,会影响较大。

    归一化实例:

    # 归一化处理

    # 导入归一化模块MinMaxScaler

    from sklearn.preprocessing import MinMaxScaler

    def mm():

    # 实例化

    mm = MinMaxScaler()

    data = mm.fit_transform([[123,222,2,54],[70,60,10,99],[65,40,30,23]])

    print(data)

    会输出:

    [[1.        1.        0.        0.40789474]

    [0.0862069  0.10989011 0.28571429 1.        ]

    [0.        0.        1.        0.        ]]

    如果想让他显示不在0-1之间,而是在2,5之间:

    # 实例化修改成:

    mm = MinMaxScaler(feature_range=(2,5))

    # 根据数值的大小,对应生成某个区间对应值的大小。

    数值型数据之标准化

    由于归一化对异常值的处理不好,所以不常用

    使用最广泛的就是标准化。标准化就是在归一化的基础上对异常值的处理较好。

    特点:通过原始数据进行变换到均值为0,方差为1范围。

    x = x-mean/标准差

    # 作用于每一列,mean为平均值。标准差这里不好写,自己百度一下就好。

    标准差实例:

    # 导入标准差模块StandardScaler

    from sklearn.preprocessing import MinMaxScaler,StandardScaler

    # 标准差处理

    def stand():

    std = StandardScaler()

    data = std.fit_transform([[123,222,2,54],[70,60,10,99],[65,40,30,23]])

    print(data)

    输出:

    [[ 1.40992884  1.40709714 -1.01904933 -0.14956377]

    [-0.60969896 -0.58083661 -0.33968311  1.29265832]

    [-0.80022988 -0.82626053  1.35873244 -1.14309455]]

    # 标准化常用于数据多且杂的情况下。

    缺失值的处理

    1、删除,整行或者整列的删除(数据来之不易,不建议)

    2、填补,根据实际情况的不同,填充平均值,中位数等值(一般按照列来填充)

    sklearn提供的填充模块:sklearn.preprocessing.Imputer

    使用:imputer(missing_values="NaN",strategy="mean",axis=0)

    missing_values:缺失值的位置

    strategy:填充什么值,mean表示平均数

    axis:更具0轴还是1轴填充值

    实例:

    # 导入模块

    from sklearn.preprocessing import Imputer

    import numpy as np

    def Im():

    im = imputer(missing_values="NaN",strategy="mean",axis=0)

    data = im.fit_transform([[123,np.nan,2,54],[np.nan,60,10,99],[65,40,30,23]])

    print(data)

    输出:

    [[123.  50.  2.  54.]

    [ 94.  60.  10.  99.]

    [ 65.  40.  30.  23.]]

    数据的降维

    降维:特征的数量(不是数组的维度)

    比如有身高,体重,头发长度这三个特征,就是三维。

    将三维变成二维就是降维处理。

    为什么要降维?

    有些不重要影响不大的数据我们可以选择不要。

    降维的方式:

    1、特征选择

    2、主成分分析

    特征选择:

    如果特征过多,几千个特选不可能人为的选择。这里就要借助其他工具。

    常用特征处理:

    1、Fileter:过滤

    # 对方差进行过滤,方差小的,说明数值相差不大,也就是特征大致相同,就选择过滤掉。

    2、Embedded:嵌入式(正则化,决策树)后面讲

    3、神经网络

    特征选择实例:

    def var():

    # 数据

    test = [[2,4,6],[3,4,8],[6,4,9]]

    # threshold=0.0表示把一样的数据删除,默认也是删除方差为0的

    v = VarianceThreshold(threshold=0.0)

    data = v.fit_transform(test)

    print(data)

    # VarianceThreshold你可以自己修改,修改成1.0就删除方差小于1.0的数据。

    主成分分析(PCA)

    PCA:分析,简化数据集的技术

    目的:对数据维度进行压缩,减少原数据的维度,损失的数据较少

    应用场景:特征数量达到上百个就需要考虑一下了。

    用低维度表示高纬度的东西但损失较少的数据,结合实际,最常见的就是画出的立体图。

    公式:百度一下,有兴趣的也可以看一下推导式。

    PCA实例:

    # 导入模块

    from sklearn.decomposition import PCA

    def pca():

    test = [[2,4,6],[3,4,8],[6,4,9]]

    pca = PCA(n_components=0.99)

    data = pca.fit_transform(test)

    print(data)

    输出:

    [[-2.32318647 -0.39794495]

    [-0.35170213  0.65716145]

    [ 2.6748886  -0.25921649]]

    # 变成了2个特征的。

    # n_components参数可以是小数也可以是整数

    # 小数表示要保存%之多少的数据

    # 整数表示去掉多少数据

    数据集的划分

    拿到很多数据,不会将他全部用来训练模型。

    把数据分为两部分:训练集和测试集

    一般70%,30%,或75%,25%或80%,20%。

    训练集就是帮助我们建立模型,而测试集就是评估模型。

    sklearn给我们提供了划分数据的模块:sklearn.model_selection.train_test_split

    同时sklearn也提供给了学习使用的数据:

    skliearn.datasets模块

    datasets.load_xxx():提供给我们小规模数据

    datasets.fetch_xxx(data_home=None):大规模数据

    # 这里xxx表示不同的数据集。

    # data_home表示需要下载的路径

    返回的数据都是datasets.base.Bunch类型(也就是字典格式)

    属性:

    data:获取特征数据数组,是一个多行多列的二维数组(类型为numpy.ndarray)

    target:标签,一维数组(也就是目标值)

    DESCR:数据描述

    deature_names:特征名(有些数据集没有)

    target_names:标签名

    实例:

    # 导入鸢尾花数据集(4个花的特征,3中类别,150个样本数据,每个类别数量50个)

    from sklearn.datasets import load_iris

    # 导入划分训练集和评估集模块

    from sklearn.model_selection import train_test_split

    def Iris():

    # 获取到数据集

    l = load_iris()

    # 输出特征值

    print(l.data)

    # 输出目标值

    print(l.target)

    # 输出数据集详情(什么特征,什么类别等)

    print(l.DESCR)

    # 获取特征名

    print(l.feature_names)

    # 获取目标值名称

    print(l.target_names)

    # 划分数据集

    # 返回数据的顺序为训练集的特征值,测试集的特征值,训练集的特征值,训练集的目标值,测试集的目标值

    # 依次起名为:x_train,x_test,y_train,y_test(不能改变顺序)

    # 第一个参数为数据,第二个参数为目标值,第三个为测试集大小。

    x_train,x_test,y_train,y_test = train_test_split(l.data,l.target,test_size=0.25)

    print("训练集数据和目标值:",x_train,y_train)

    # 在sklearn还有其他数据,比如load_diabetes()是糖尿病数据集。

    # 对于大数据集这里就不慌介绍了,下载速度比较慢。

    转换器

    回想特征工程的步骤.

    1、实例化(转换器)

    2、调用fit_transform()转化成数据集

    其实在其中还有两个方法,fit()和transform(),很像把fit_transform拆分开了。

    实际fit_transform() = fit()+ transform()

    fit():输入数据,但是不做转化,但是他提前做了计算平均值等。

    transform():进行数据的转化。

    为什么拆开?

    转换成数据集的时候是根据平均值,方差等等计算转化的。

    但是如果我不想用这个数据集的平均值和方差来转化。想用其他的数据的平均值和方差来计算呢?

    此时就需要拆开处理了。

    比如:

    标准化处理:

    from sklearn.preprocessing import StandardScaler

    std = StandardScaler()

    data1 = std.fit([[111,222,333],[444,555,666]])

    data2 = std.transform([[11,22,33],[44,55,66]])

    此时也就是用来data1中的平均值和方差等来转化data2中的数据。

    估计器

    估计器就是一些算法的实现。

    分类算法:

    sklearn.neighbors:k-近邻算法

    sklearn.naive_bayes:贝叶斯算法

    sklearn.linear_model.LogisticRegression:逻辑回归

    sklearn.tree:决策树和随机森林

    回归算法:

    sklearn.linear_model.LinearRegression:线性回归

    sklearn.linear_model.Ridge:岭回归

    相关文章

      网友评论

          本文标题:机器学习篇(二)

          本文链接:https://www.haomeiwen.com/subject/srrxdqtx.html