机器学习学习笔记(二)之特征提取

一、什么是特征工程

  • 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
  • 意义:会直接影响机器学习的效果

二、特征工程的位置与数据处理的比较

  • pandas:数据清洗、数据处理
  • sklearn:对于特征的处理提供了强大的接口

三、特征抽取/特征提取

1、将任意数据(如文本或图像)转换为可用于机器学习的数字特征

  • 字典特征提取(特征离散化)
  • 文本特征提取
  • 图像特征提取(深度学习将介绍)

2、特征提取API

  • sklearn.feture_extraction

3、字典特征提取

作用:对字典数据进行特征值化

  • sklearn.feature_extraction.DictVectorizer(sparse=Ture,…)
  • DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵
  • DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵返回值:转换之前的数据格式
  • DictVectorizer.get_feature_names() 返回类别名称

1)应用

from sklearn.feature_extraction import DictVectorizer
def dict_demo():
    '''
    字典特征提取
    :return:
    '''
    data = [{'city':'北京','temperature':100},{'city':'上海','temperature':60},{'city':'深圳','temperature':30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer(sparse = False)
    # 2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print('data_new:\n',data_new)
    print('特征名字:\n',transfer.get_feature_names())
    return None

if __name__ == '__main__':
    dict_demo()

#默认sparse = True,返回sparse矩阵
#当sparse = False时,返回二维数组

默认sparse = True,返回sparse矩阵,
稀疏矩阵将非0值按位置表示出来,好处:节省内存——提高加载效率

当sparse = False时,返回二维数组
在这里插入图片描述
2)总结

  • 对于特征当中存在类别信息的我们都会做one-hot编码处理

3)应用场景

  • 数据集中类别特征比较多的情况下

    • 将数据集的特征转换为字典类型
    • DictVectorizer转换
  • 本身拿到的数据就是字典类型

4、文本特征提取
作用:对文本数据进行特征值化

  • sklearn.feature_extraction.text.CountVectorizer(stop_words = [])
    –返回词频矩阵(统计每个样本特征词出现的个数)

    • CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
    • CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前的数据格
    • CountVectorizer.get_feature_names() 返回值:单词列表
  • sklearn.feature_extraction.text.TfidfVectorizer

    • TF-IDF的主要思想是:如果某个词或者短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语有很好的类别区分能力,适合用来分类
    • TF-IDF的作用:用以评估一字对于一个文件集或者一个语料库中的其中一份文件的重要程度
    • 公式:重要程度=tf(词频,给定词语在该文件中出现的频率) * idf(逆向文档频率,以10位底 总文件数/包含该词语文件数 的对数)
    • TfidfVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
    • TfidfVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前的数据格
    • TfidfVectorizer.get_feature_names() 返回值:单词列表

1.1)应用—CountVectorizer

from sklearn.feature_extraction.text import CountVectorizer
def count_demo():
    '''
    文本特征抽取:CountVectorizer
    :return:
    '''
    data = ['life is short,i like like python','life is too long,i dislike python']
    # 1、实例化一个转换器类
    transfer = CountVectorizer(stop_words = ['is','too'])
    #stop_words:停用词,不显示了
    
    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print('data_new:\n', data_new)
    print('data_new:\n', data_new.toarray())
    # 返回二维数组结果
    print('特征名字:\n', transfer.get_feature_names())
    
    return None
    
if __name__ == '__main__':
    count_demo()

在这里插入图片描述
1.2)应用—jieba + CountVectorizer 中文文本自动分词(可手动加空格)

from sklearn.feature_extraction.text import CountVectorizer
import jieba  # 结巴分词

def cut_word(text):
    '''
    进行中文分词:'我爱北京天安门'->'我 爱 北京 天安门'
    :param text: 
    :return: 
    '''
    text = "".join(list(jieba.cut(text)))
    # 转换器转换列表转换字符串
    return text

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

    # 3、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print('data_final:\n', data_final)
    print('data_final:\n', data_final.toarray())
    print('特征名字:\n', transfer.get_feature_names())

    return None
    
if __name__ == '__main__':
    count_chinese_demo()

1.3)应用—TfidfVectorizer (关键词分类)

from sklearn.feature_extraction.text import TfidfVectorizer
def tfidf_demo():
    '''
    用TF-IDF的方法进行文本特征的提取
    :return:
    '''
    data = ['life is short,i like like python','life is too long,i dislike python']
    # 1、实例化一个转换器类
    transfer = TfidfVectorizer()

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print('data_new:\n', data_new)
    print('data_new:\n', data_new.toarray())
    print('特征名字:\n', transfer.get_feature_names())
    return None

if __name__ == '__main__':
    tfidf_demo()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构,从而不断改善自身的性能。机器学习是人工智能的核心,也是使计算机具有智能的根本途径。 应用: 机器学习在各个领域都有广泛的应用。在医疗保健领域,它可用于医疗影像识别、疾病预测、个性化治疗等方面。在金融领域,机器学习可用于风控、信用评分、欺诈检测以及股票预测。此外,在零售和电子商务、智能交通、生产制造等领域,机器学习也发挥着重要作用,如商品推荐、需求预测、交通流量预测、质量控制等。 优点: 机器学习模型能够处理大量数据,并在相对短的时间内产生可行且效果良好的结果。 它能够同时处理标称型和数值型数据,并可以处理具有缺失属性的样本。 机器学习算法如决策树,易于理解和解释,可以可视化分析,容易提取出规则。 一些机器学习模型,如随机森林或提升树,可以有效地解决过拟合问题。 缺点: 机器学习模型在处理某些特定问题时可能会出现过拟合或欠拟合的情况,导致预测结果不准确。 对于某些复杂的非线性问题,单一的机器学习算法可能难以有效地进行建模和预测。 机器学习模型的训练通常需要大量的数据和计算资源,这可能会增加实施成本和时间。 总的来说,机器学习虽然具有许多优点和应用领域,但也存在一些挑战和限制。在实际应用中,需要根据具体问题和需求选择合适的机器学习算法和模型,并进行适当的优化和调整。
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构,从而不断改善自身的性能。机器学习是人工智能的核心,也是使计算机具有智能的根本途径。 应用: 机器学习在各个领域都有广泛的应用。在医疗保健领域,它可用于医疗影像识别、疾病预测、个性化治疗等方面。在金融领域,机器学习可用于风控、信用评分、欺诈检测以及股票预测。此外,在零售和电子商务、智能交通、生产制造等领域,机器学习也发挥着重要作用,如商品推荐、需求预测、交通流量预测、质量控制等。 优点: 机器学习模型能够处理大量数据,并在相对短的时间内产生可行且效果良好的结果。 它能够同时处理标称型和数值型数据,并可以处理具有缺失属性的样本。 机器学习算法如决策树,易于理解和解释,可以可视化分析,容易提取出规则。 一些机器学习模型,如随机森林或提升树,可以有效地解决过拟合问题。 缺点: 机器学习模型在处理某些特定问题时可能会出现过拟合或欠拟合的情况,导致预测结果不准确。 对于某些复杂的非线性问题,单一的机器学习算法可能难以有效地进行建模和预测。 机器学习模型的训练通常需要大量的数据和计算资源,这可能会增加实施成本和时间。 总的来说,机器学习虽然具有许多优点和应用领域,但也存在一些挑战和限制。在实际应用中,需要根据具体问题和需求选择合适的机器学习算法和模型,并进行适当的优化和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值