机器学习 特征工程

1. 为什么需要特征工程

        数据和特征决定了机器学习的上限,而模型和算法只是逼近了这个上限而已

2. 什么是特征工程

        特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程

3. 特征工程的位置与数据处理的比较

        pandas:一个数据读取非常方便以及基本的处理数据格式的工具

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

        特征工程内容包括

                特征抽取/特征提取

                特征预处理

                特征降维

4. 特征提取

        4.1 什么是特征提取

                将任意数据(文本或图像)转换为可用于机器学习的数字特征(特征提取是为了计算机更好的去理解数据)

        4.2 字典特征提取(对字典数据进行特征值化)

                sklearn.feature_extraction.DictVectorizer(sparse=True,...)

                代码如下:

                        1. fit 步骤学习数据的特征,transform 步骤将数据转换为数值矩阵

                        2.  DictVectorizer 类,它是 sklearn.feature_extraction 模块中的一个工具,用于将字典形式的数据转换为可以用于机器学习模型的格式

from sklearn.feature_extraction import DictVectorizer

"""
字典特征抽取
"""
data = [{'city': '北京', 'temperature': 100},
        {'city': '上海', 'temperature': 60},
        {'city': '深圳', 'temperature': 30}]

# 1、实例化一个转换器类
# transfer = DictVectorizer()   # sparse=False 意味着转换结果将不是稀疏矩阵,而是一个常规的密集数组
transfer = DictVectorizer(sparse=False)

# 2、调用fit_transform()          字典或者包含字典的迭代器,返回值sparse矩阵
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)

# 3、调用inverse_transform()       array数组或者sparse矩阵,返回值转换之前的数据格式
data_real = transfer.inverse_transform(data_new)
print("data_real: \n", data_real)

print("特征名字:\n", transfer.get_feature_names_out())

5. 特征预处理

        去除数值数据的量纲:(不同特征之间量纲不一,但是数据特征同等重要)

                归一化

                标准化

        5.1 归一化

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

# 1、获取数据
data = pd.read_csv("datingTestSet2.txt", sep='\t')

# 取原始数据中的所有行,前三列数据
data = data.iloc[:, :3]
print("data:\n", data)

# 2、实例化一个转换器类
transform = MinMaxScaler()

# 3、调用fit_transform
data_new = transform.fit_transform(data)
print("data_new:\n", data_new)

        最大值与最小值非常容易受到异常值的影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景

        5.2 标准化

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

# 1、获取数据
data = pd.read_csv("datingTestSet2.txt", sep='\t')

# 取原始数据中的所有行,前三列数据
data = data.iloc[:, :3]
print("data:\n", data)

# 2、实例化一个转换器类
transform = StandardScaler()

# 3、调用fit_transform
data_new = transform.fit_transform(data)
print("data_new:\n", data_new)

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

6. 特征降维

        降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程

        6.1 降维的两种选择

                特征选择       L1正则化

                主成分分析(一种特征提取的方式)

        6.2 特征选择

                1. 定义:

                特征选择:数据中包含冗余或相关变量(特征),旨在从原有特征中找出主要特征

                2. 方法:

                Filter过滤式:主要研究特征本身特点、特征与特征和特征与目标值之间的关联

                       (1)方差选择法:低方差特征过滤

                       (2)相关系数:特征与特征之间的相关程度

                Embedded嵌入式:算法自动选择特征(特征与目标值之间的关联)

                        (1)决策树:信息熵、信息增益

                        (2)正则化:L1

                        (3)深度学习:卷积

                3. 模块:

sklearn.feature_selection

                4. 过滤式

                        4.1 低方差特征过滤   删除低方差的一些特征

                                特征方差小:某个特征大多样本的值比较接近

                                特征方差大:某个特征很多样本的值都有差别

                        API   sklearn.feature_selection.VArianceThreshold(threshold=0.0)

                        删除所有低方差特征

                        Variance.fit_transform(X),X:numpy array格式的数据[m_sample,n_features],返回值:训练集差异低于threadshold的特征将被删除。默认值是保留非零方差特征,即删除所有样本中具有相同值的特征。

from sklearn.feature_selection import VarianceThreshold
import pandas as pd

# 1、获取数据
data = pd.read_csv("datingTestSet2.txt", sep='\t')

# 取原始数据中的所有行,前三列数据
data = data.iloc[:, :3]
print("data:\n", data)

# 2、实例化一个转换器类
transform = VarianceThreshold(threshold=10)

# 3、调用fit_transform, 方差小于10的特征将被删除
data_new = transform.fit_transform(data)
print("data_new:\n", data_new)

                        4.2 相关系数

                                皮尔逊相关系数(Pearson Correlation Coefficient):反映变量之间相关关系密切程度的统计指标

                                公式:

                                特点:                        

                        API  from scipy.stats import pearsonr

from sklearn.feature_selection import VarianceThreshold
import pandas as pd
from scipy.stats import pearsonr

# 1、获取数据
data = pd.read_csv("datingTestSet2.txt", sep='\t')

# 取原始数据中的所有行,前三列数据
data = data.iloc[:, :3]
print("data:\n", data)

# 2、实例化一个转换器类
transform = VarianceThreshold(threshold=10)

# 3、调用fit_transform, 方差小于10的特征将被删除
data_new = transform.fit_transform(data)
print("data_new:\n", data_new)

# 计算两个变量之间的相关系数
r = pearsonr(data["pe_ratio"], data["pb_ratio"])
print("相关系数:\n", r)

                        相关系数返回的是一个元组(皮尔逊相关系数,P值)                              

          

                

                 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
特工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。它包括特征抽取、特征预处理和特征降维等内容。特征工程对于机器学习的效果具有直接影响。 在Python中进行机器学习特征工程,可以使用多个库和工具来完成。下面是一些常用的Python库和工具: 1. Scikit-learn:Scikit-learn是一个功能丰富的机器学习库,提供了许多特征工程的方法,包括特征抽取、特征预处理和特征降维等。你可以使用Scikit-learn来进行特征选择、标准化、缺失值处理等操作。 2. Pandas:Pandas是一个用于数据分析和处理的库,提供了丰富的数据操作功能。你可以使用Pandas来加载和清洗数据,进行数据预处理和特征选择。 3. Numpy:Numpy是Python中一个强大的数值计算库,提供了高效的数组操作功能。你可以使用Numpy来进行数值特征的处理,如归一化、标准化和缩放等。 4. Featuretools:Featuretools是一个用于自动特征工程的库,它可以根据数据的结构和关系自动生成特征。你可以使用Featuretools来创建新的特征,通过组合和聚合现有特征。 5. Feature-Engine:Feature-Engine是一个专注于特征工程的库,提供了多个特征处理方法。你可以使用Feature-Engine来处理缺失值、离群值、编码分类变量等。 在进行机器学习特征工程时,你需要根据具体的问题和数据集选择适合的方法和工具。通过合理的特征工程处理,可以提高机器学习模型的性能和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值