机器学习之特征工程

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

  • 意义:会直接影响机器学习的效果

特征工程包含的内容:

  • 特征抽取
  • 特征预处理
  • 特征降维

特征抽取

机器学习算法 – 统计方法 – 数学公式
文本类型 —> 数值
类型 ----> 数值

字典的特征提取

sklearn.feature_extraction.DictVectorizer(sparse=True…)

vector 向量、矢量
	矩阵: matrix 二维数组
	向量: vector 一维数组
父类:转换器类
返回sparse矩阵(稀疏矩阵)

应用场景:
	1>数据集当中类别特征比较多
		* 将数据集的特征-----> 字典类型
		* DictVectorizer转换
	2>本身拿到的数据就是字典类型

补充
稀疏矩阵:将非零值按位置表现出来
节省内存,提高加载效率

在这里插入图片描述


def dict_demo():
    '''
    字典特征值抽取
    :return:
    '''
    data = [{'city':'北京','temperature':100},{'city':'上海','temperature':60},
            {'city':'深圳','temperature':30}]
    #1.实例化一个转换器类
    transfer1 = DictVectorizer(sparse=True)
    transfer2 = DictVectorizer(sparse=False)

    #2.调用 fit_transform()
    data_new1 = transfer1.fit_transform(data)
    data_new2 = transfer2.fit_transform(data)
    print("data_new1:\n",data_new1)
    print("data_new2:\n",data_new2)

if __name__ == "__main__":
    # sklearn()数据集的使用
    # datasets_demo()
    #字典特征值的抽取
    dict_demo()

在这里插入图片描述

文本的特征提取

单词 作为 特征(句子、短语、单词、字母…)

  • 方法一:CountVectorizer
    统计每个 样本特征词 出现的个数
    • 注意:
      • 某些参数:stop_words 停用词,不计入特征词的单词
      • 中文句子无空格会被当作一个特征词
      • 单个字母或中文不计入特征值
        关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少
  • 方法二:TfidfVectorizer
    * TF-IDF – 重要程度
    * TF — 词频
    * IDF — 逆向文档频率
    * 返回值:sparse矩阵

在这里插入图片描述
方法一:CountVectorizer


def count_demo():
    '''
    文本特征抽取
    :return:
    '''
    data = ["life is short,i like like python",
            "life is too long,i dislike python"]
    #1.实例化一个转换器类
    transfer = CountVectorizer()
    #2.调用 fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    # 单词字典
    print("\n",transfer.get_feature_names())
    return None

if __name__ == "__main__":
    #文本特征值的抽取
    count_demo()
#注意:不支持单个字母

在这里插入图片描述


def count_cn_demo():
    '''
    文本特征抽取
    :return:
    '''
    data1 = ["我爱北京天安门",
            "天安门上太阳升"]
    data2 = ["我 爱 北京 天安门",
            "天安门 上 太阳 升"]
    #1.实例化一个转换器类
    transfer = CountVectorizer()
    #2.调用 fit_transform()
    data_new1 = transfer.fit_transform(data1)
    print("data_new1:\n", data_new1.toarray())
    # 单词字典
    print(transfer.get_feature_names())
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`")
    data_new2 = transfer.fit_transform(data2)
    print("data_new2:\n", data_new2.toarray())
    # 单词字典
    print( transfer.get_feature_names())
    return None

if __name__ == "__main__":
    #中文文本特征值的抽取
    count_cn_demo()
#注意:不支持单个中文

在这里插入图片描述


进阶
自动进行中文分词

def cut_word(text):
    '''
    进行中文分词:"我爱北京天安门"----》"我 爱 北京 天安门"
    :param text:
    :return:
    '''
    # a = " ".join(list(jieba.cut(text)))
    # print(a)
    return " ".join(list(jieba.cut(text)))

def count_cn_demo2():
    '''
    中文文本特征抽取,自动分词
    :return:
    '''
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
    data_new = []
    for sentence in data:
        data_new.append(cut_word(sentence))
    # 1.实例化一个转换器类
    transfer = CountVectorizer()
    # 2.调用 fit_transform()
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n",transfer.get_feature_names())
    return None

if __name__ == "__main__":
    #测试
    # data = "我爱北京天安门"
    # cut_word(data)
    #中文文本特征抽取,自动分词
    count_cn_demo2()


在这里插入图片描述


方法二:TfidfVectorizer

def tfidf_demo():
    '''
        使用TF-IDF的方法进行文本特征抽取
        :return:
        '''
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]
    data_new = []
    for sentence in data:
        data_new.append(cut_word(sentence))
    # 1.实例化一个转换器类
    transfer = TfidfVectorizer()
    # 2.调用 fit_transform()
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

if __name__ == "__main__":
    # sklearn()数据集的使用
    # datasets_demo()
    #字典特征值的抽取
    # dict_demo()
    #文本特征值的抽取
    # count_demo()
    #中文文本特征值的抽取
    # count_cn_demo()
    #测试
    # data = "我爱北京天安门"
    # cut_word(data)
    #中文文本特征抽取,自动分词
    # count_cn_demo2()
    # 使用TF-IDF的方法进行文本特征抽取
    tfidf_demo()

特征预处理

在这里插入图片描述

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

包含的内容

  • 数值型数据的无量钢化:
    • 归一化
    • 标准化
  • 特征预处理API

sklearn.preprocessing


归一化
异常值:最大值、最小值
出现该情况结果显然出现异常
在这里插入图片描述

例如:
在这里插入图片描述

x' = (90-60)/(90-60) = 1
x'' = 1*1+0 = 1
def minmax_demo():
    '''
    归一化
    :return:
    '''
    #1.获取数据
    data = pd.read_csv("dating.txt")
    # print(data)
    data = data.iloc[:,:3]   #只取数据前三列
    #2.实例化一个转换器类型
    transfer = MinMaxScaler()   #默认0-1
    #3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new)

    return None

if __name__ == "__main__":

    # 归一化
    minmax_demo()

在这里插入图片描述

标准化
在这里插入图片描述

def stand_demo():
    '''
       标准化
       :return:
       '''
    # 1.获取数据
    data = pd.read_csv("dating.txt")
    # print(data)
    data = data.iloc[:, :3]  # 只取数据前三列
    # 2.实例化一个转换器类型
    transfer = StandardScaler()  # 默认0-1
    # 3.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    return None

if __name__ == "__main__":
    #标准化
    stand_demo()

在这里插入图片描述

特征降维

降低的对象:二维数组
降维:降低特征的个数
效果:特征与特征不相关

降维的两种方法

  • 特征选择
  • 主成分分析
特征选择

数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。

  • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联。
    * 方差选择法:低方差特征过滤
    * 相关系数:特征与特征之间的相关程度
  • Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)。
    * 决策树:信息嫡、信息增益
    * 正则化
    * 深度学习
主成分分析(PCA)

定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量

作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

  • sklearn.decomposition.PCA(n_components=None)
    • n_components:
      小数:表示保留到百分之多少的信息
      整数:表示减少到多少特征
    • 返回值:转换后指定维数的array

在这里插入图片描述

def pca_demo():
    '''
    PCA降维
    :return:
    '''
    data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]  #三行四列
    #1.实例化一个转换器类
    transfer = PCA(n_components=2)
    #2.调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n",data_new)
    return None

if __name__ == "__main__":
    # PCA降维
    pca_demo()

在这里插入图片描述

案例:探究用户对物品类别的喜好细分降维
import pandas as pd

# 1.获取数据
from sklearn.decomposition import PCA

order_products = pd.read_csv("order_products__prior.csv")#order_id product_id add_to_cart_order reordered
products = pd.read_csv("products.csv")#product_id  ... department_id
orders = pd.read_csv("orders.csv")#order_id user_id...order_hour_of_day days_since_prior_order
aisles = pd.read_csv("aisles.csv")#aisle_id aisle
# print(products)
# 2.合并表
table1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"])
table2 = pd.merge(table1,order_products,on=["product_id","product_id"])
table3 = pd.merge(table2,orders,on=["order_id","order_id"])
print(table3.head())
# 3.找到user_id和aisle之间的关系
table = pd.crosstab(table3["user_id"],table3["aisle"])
data = table[:10000]
# 4.PCA降维
#1)实例化一个转换器类
transfer = PCA(n_components=0.95)
#2)调用fit_transform
data_new = transfer.fit_transform(data)
print(data_new.shape)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《面向机器学习特征工程pdf》是一本关于机器学习领域中特征工程的书籍。特征工程机器学习中非常重要的一环,其涉及到从原始数据中提取有意义、有用的特征,并将其转化为机器学习算法可以接受的形式。 这本书的主要内容包括特征工程的基本概念、原理和方法,以及在实际应用中的具体实践。首先,书中介绍了特征工程的意义和作用,强调了良好的特征工程机器学习模型性能的提升具有至关重要的作用。 接着,书中详细讲解了常用的特征选择和特征提取方法。特征选择是筛选出对目标变量有最大相关性的特征,以减少特征的维度和冗余性;而特征提取是从原始数据中抽取出最具代表性的特征,以提高模型的泛化能力。书中列举了一些常用的特征选择和特征提取方法,如方差选择、相关系数、主成分分析等,并提供了相应的算法原理和实例。 此外,书中还介绍了一些特征工程中常见的问题和挑战,如缺失值处理、异常值处理和特征缩放等。对于这些问题,书中给出了一些有效的解决策略和技巧,并提供了实际案例和代码示例,帮助读者理解和应用这些方法。 总的来说,《面向机器学习特征工程pdf》是一本系统全面介绍机器学习特征工程的书籍。它将理论和实践结合起来,通过丰富的案例和示例,帮助读者理解和掌握特征工程的基本原理和方法,并能够在实际应用中灵活运用。无论是初学者还是有一定经验的机器学习从业者,都可以从这本书中获得很多有价值的知识和经验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值