【K-近邻算法】特征工程-特征预处理

1. 什么是特征预处理

1.1 特征预处理定义

scikit-learn的解释
provides several common utility functions and transformer classes to change raw feature vectors into a representation that is more suitable for the downstream estimators.

翻译过来:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

在这里插入图片描述
为什么我们要进行归一化/标准化?

  • 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征

举例:约会对象数据

在这里插入图片描述
我们需要用到一些方法进行无量纲化使不同规格的数据转换到同一规格

1.2 包含内容

数值型数据的无量纲化

  • 归一化
  • 标准化

1.3 特征预处理API

sklearn.preprocessing

2. 归一化

2.1 定义

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

2.2 公式

在这里插入图片描述
作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

那么怎么理解这个过程呢?

我们通过一个例子

在这里插入图片描述

2.3 API

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )

    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

2.4 数据计算

我们对以下数据进行运算,在dating.txt中。保存的就是之前的约会对象数据

milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1

分析

1、实例化MinMaxScalar

2、通过fit_transform转换

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

def minmax_demo():
    """
    归一化演示
    :return: None
    """
    data = pd.read_csv("./data/dating.txt")
    print(data)
    # 1、实例化一个转换器类
    transfer = MinMaxScaler(feature_range=(2, 3))
    # 2、调用fit_transform
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("最小值最大值归一化处理的结果:\n", data)

    return None

返回结果:

 milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
3     75136  13.147394    0.428964       1
..      ...        ...         ...     ...
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值归一化处理的结果:
 [[ 2.44832535  2.39805139  2.56233353]
 [ 2.15873259  2.34195467  2.98724416]
 [ 2.28542943  2.06892523  2.47449629]
 ..., 
 [ 2.29115949  2.50910294  2.51079493]
 [ 2.52711097  2.43665451  2.4290048 ]
 [ 2.47940793  2.3768091   2.78571804]]

问题:如果数据中异常点较多,会有什么影响?

在这里插入图片描述

2.5 归一化总结

注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

怎么办?

3. 标准化

3.1 定义

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

3.2 公式

在这里插入图片描述

作用于每一列,mean为平均值,σ为标准差

所以回到刚才异常点的地方,我们再来看看标准化

在这里插入图片描述

  • 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

3.3 API

  • sklearn.preprocessing.StandardScaler()

    • 处理之后每列来说所有数据都聚集在均值0附近标准差差为1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

3.4 数据计算

同样对上面的数据进行处理

分析

1、实例化StandardScaler

2、通过fit_transform转换

import pandas as pd
from sklearn.preprocessing import StandardScaler

def stand_demo():
    """
    标准化演示
    :return: None
    """
    data = pd.read_csv("dating.txt")
    print(data)
    # 1、实例化一个转换器类
    transfer = StandardScaler()
    # 2、调用fit_transform
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("标准化的结果:\n", data)
    print("每一列特征的平均值:\n", transfer.mean_)
    print("每一列特征的方差:\n", transfer.var_)

    return None

返回结果:

milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
..      ...        ...         ...     ...
997   26575  10.650102    0.866627       3
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
标准化的结果:
 [[ 0.33193158  0.41660188  0.24523407]
 [-0.87247784  0.13992897  1.69385734]
 [-0.34554872 -1.20667094 -0.05422437]
 ..., 
 [-0.32171752  0.96431572  0.06952649]
 [ 0.65959911  0.60699509 -0.20931587]
 [ 0.46120328  0.31183342  1.00680598]]
每一列特征的平均值:
 [  3.36354210e+04   6.55996083e+00   8.32072997e-01]
每一列特征的方差:
 [  4.81628039e+08   1.79902874e+01   2.46999554e-01]

3.5 标准化总结

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

4. 总结

  • 什么是特征工程
    • 定义
      通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
    • 包含内容:
      归一化
      标准化
  • 归一化
    • 定义:
      对原始数据进行变换把数据映射到(默认为[0,1])之间
    • api:
      sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
      参数:feature_range – 自己指定范围,默认0-1
    • 总结:
      鲁棒性比较差(容易受到异常点的影响)
      只适合传统精确小数据场景(以后不会用你了)
  • 标准化
    • 定义:
      对原始数据进行变换把数据变换到均值为0,标准差为1范围内
    • api:
      sklearn.preprocessing.StandardScaler( )
    • 总结:
      异常值对我影响小
      适合现代嘈杂大数据场景(以后就是用你了)

加油!

感谢!

努力!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: scikit-learn是一个用于机器学习的Python库。它提供了丰富的机器学习算法和工具,使得我们能够更加方便地进行数据挖掘和预测分析。 scikit-learn库内置了许多经典的监督学习和无监督学习算法,如线性回归、逻辑回归、决策树、支持向量机、聚类算法等。我们可以使用这些算法进行分类、回归和聚类等任务。此外,scikit-learn还提供了模型选择、特征选择和模型评估等功能,使得我们能够更好地进行模型优化和性能评估。 scikit-learn的优点之一是其简单易用的接口和一致的编程风格。我们只需使用相同的方法和参数即可应用不同的算法。这使得我们能够快速上手并且能够更好地理解和比较不同的算法。 此外,scikit-learn还具有丰富的文档和示例代码,使得我们能够更好地学习使用和掌握相关知识。我们可以利用这些文档和示例代码来了解算法的原理和使用方法,以及如何解决实际问题。 总之,scikit-learn是一个功能强大且易于使用的机器学习库。它提供了丰富的机器学习算法和工具,使得我们能够更加便捷地进行数据挖掘和预测分析,同时也提供了方便的模型选择和模型评估功能。无论是对于初学者还是有经验的机器学习工程师来说,scikit-learn都是一个不可或缺的工具。 ### 回答2: scikit-learn是一个用于机器学习的Python库。它是一个开源的工具包,提供了许多用于机器学习的算法和工具,方便用户在数据处理、特征提取、模型训练和评估等方面进行工作。 scikit-learn内置了许多经典的机器学习算法,包括回归算法、分类算法、聚类算法、降维算法等。这些算法都有统一的接口,使用起来非常方便。此外,scikit-learn还提供了用于数据预处理特征选择、模型评估和性能提升等功能的工具和函数,使机器学习的整个流程更加简单和高效。 scikit-learn拥有广泛的应用领域,可以用于解决各种机器学习的问题。比如,可以使用scikit-learn进行文本分类、图像识别、情感分析、推荐系统等任务。scikit-learn还支持多种数据类型,可以处理结构化数据、时间序列数据和图像数据等。 使用scikit-learn进行机器学习的过程一般可以分为几个步骤。首先,需要准备并加载数据集,然后进行数据预处理,包括缺失值处理、数据标准化和特征工程等。接下来,可以选择合适的模型进行训练,并使用交叉验证的方法来评估模型的性能。最后,可以使用训练好的模型来进行预测。 总之,scikit-learn为用户提供了一个强大且易于使用的机器学习工具,可以帮助用户快速构建和训练机器学习模型,从而解决实际问题。无论是对于初学者还是专业人士来说,scikit-learn都是一种强大的工具,可以极大地提高机器学习的效率和准确性。 ### 回答3: scikit-learn是一个用于数据挖掘和数据分析的Python库,也被广泛应用于机器学习领域。它提供了丰富的工具和算法,方便用户进行数据预处理特征选择、模型训练与评估等各个环节。 首先,scikit-learn提供了大量的数据预处理工具,包括标准化、归一化、缺失值处理等。通过这些工具,我们能够快速地对原始数据进行处理,使其适合机器学习算法的使用。 其次,scikit-learn还提供了丰富的特征选择方法,帮助我们筛选出对目标变量相关性较高的特征。这些方法包括方差阈值、单变量特征选择、递归特征消除等。通过特征选择,我们能够减少特征的维度,提高模型训练的效率和准确性。 针对各种机器学习任务,scikit-learn提供了丰富的算法,如线性回归、逻辑回归、决策树、支持向量机、随机森林、K近邻等。这些算法具有良好的可解释性和表达能力,能够解决各种不同的问题。 此外,scikit-learn提供了丰富的模型评估指标和交叉验证方法,帮助我们评估模型的性能和泛化能力。通过这些评估指标,我们能够选择最优的模型,并进行模型的调参。 总之,scikit-learn是一个功能强大、易于使用且免费的机器学习库。它提供了丰富的工具和算法,帮助用户进行数据处理、特征选择、模型训练与评估等各个流程,并帮助用户构建高性能的机器学习模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chaser&upper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值