机器学习的特征工程方法总结

一. 特征工程

特征工程 是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性

二. 具体方法

  1. 字典特征抽取
    1. API : sklearn.feature_extraction.DictVectorizer
    2. 对字典数据进行特征值化
    3. 第一步 : 实例化 DictVectorize
    4. 第二步 : 调用 fit_transform 输入数据并转换 返回的是 sparse 矩阵,转换为数组 用 .toarray() 方法
    5. 具体代码:
dict_file = [
    {'city': '北京', 'temperature': 100},
    {'city': '上海', 'temperature': 60},
    {'city': '深圳', 'temperature': 30},
]
dict = DictVectorizer(sparse=False)
    # 调用 fit_transform
    data = dict.fit_transform(dict_file)
    # one-hot编码  把分类数据转化为二进制格式,供机器学习使用。
    print(data)
    print(dict.inverse_transform(data))  # inverse_transform 是将数据格式转化为 转换之前的格式
    print(dict.get_feature_names())

运行结果 :
在这里插入图片描述

  1. 文本特征抽取
    1. API : sklearn.feature_extraction.text.CountVectorizer
    2. 对 英文文本 进行特征值化
data_file1 = [
        "life is short ,i like python is is is",
        "life is too long,i dislike python"
    ]

    cv = CountVectorizer()  # 进行实例化
    data1 = cv.fit_transform(data_file1)  # 计算
    print(cv.get_feature_names())
    print(data1.toarray())

运行结果 :
在这里插入图片描述

  1. 中文文本特征值化
    1. 因为不支持单个中文, 所以我们需要用到另外一个库 jieba 分词库 专门对中文进行分词
    2. API : sklearn.feature_extraction.text.CountVectorizer 和 jieba
    3. 第一步 : 先利用 jieba 对文本进行分词处理
    4. 第二步 : 将分词后的结果作为输入, 输入到 CountVectorizer 中
    text1 = "当你拼命想完成一件事的时候,你就不再是别人的对手,或者说得更确切一些,别人就不再是你的对手了,不管是谁,只要下了这个决心,他就会立刻觉得增添了无穷的力量,而他的视野也随之开阔了"
    text2 = "探索人类的过去,最直接可靠的方法是寻找留下的化石和遗迹,用比较解剖学方法找出化石之间的联系。但人的遗骸成为化石本身就是一个小概率事件,能找到的化石就更少了,而且大都是支离破碎。"
    text3 = "科技力量正在重新定义日常生活,也在重新塑造城市的经济结构。GDP增速6.2%——在北京2019年交出的成绩单中,“三城一区”实现的地区产值贡献超三成。"
    # print(jieba.cut(text1))
    data1 = jieba.cut(text1)
    data2 = jieba.cut(text2)
    data3 = jieba.cut(text3)
    # 转换成列表
    content1 = list(data1)
    content2 = list(data2)
    content3 = list(data3)
    # 把列表转换成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)
    # 实例化
	cv = CountVectorizer()
	# 输入 进行计算
    data = cv.fit_transform([c1,c2,c3])
    print(cv.get_feature_names())
    print(data.toarray())

运行结果 :
在这里插入图片描述

  1. TF-IDF
    1. 主要思想 : 如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类
    2. API : sklearn.feature_extraction.text.TfidfVectorizer
    3. 返回值 : 返回的是权重矩阵
	# 依然使用上一个的中文分词
	tf = TfidfVectorizer()
    data = tf.fit_transform([c1,c2,c3])
    print(data.toarray())

运行结果 :
在这里插入图片描述

三. 特征处理

  1. 归一化
    1. API : sklearn.preprocessing.MinMaxScaler
    2. 特点: 就是将所有的数据按照相应的比例映射到一个统一的区间范围之内
    3. 归一化的原理公式
    在这里插入图片描述
    4. 如果数据中的异常点比较多, 那么最大值最小值就会受到影响 下面是一个小小的例子
	# 实例化 API feature_range : 设置映射的区间  如果不设置 默认区间是 [0,1]
	mm = MinMaxScaler(feature_range=(2,3))
	# 随便搞了一些数据, 看一下缩放之后的效果
    data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
    print(data)

运行结果:
在这里插入图片描述

  1. 标准化
    1. API : sklearn.preprocessing.StandardScaler
    2. 特点 : 通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
    3. 原理 :
    在这里插入图片描述
    在这里插入图片描述
    4. 因为标准化引入了标准差,所以异常点在大数据下显得不值一提,此方法适用于大规模的数据
    5. 相应的代码 :
	# 实例化
	std = StandardScaler()
	# 计算
    data = std.fit_transform([[1,-1,3],[2,4,2],[4,6,-1]])
    print(data)

运行结果 :
在这里插入图片描述

今天先写到这里, 以后再补充, 谢谢阅读 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值