• 机器学习笔记(一)-特征提取


    机器学习笔记(一)

    一、什么是机器学习?

    机器学习是从数据中自动分析获取规律(模型),并利用规律对未知数据进行预测。通常这些要处理的数据是保存在文件中而不是数据库中的。

    、数据的格式(dataframe)

    一般数据的结构是 特征值+目标值 的形式,当然有时候也可以没有目标值。

    数据中对于特征的处理通常用到两个根据 sklearn,pandas

     三、数据的特征提取

    特征提取是对文本等数据进行特征值化,让计算机更好的理解数据。

    3.1字典特征提取

    样例:

    from sklearn.feature_extraction import DictVectorizer
    
    def dictVect():
        '''
        字典数据抽取
        '''
        #实例化
        dict=DictVectorizer(sparse=False)
        data=dict.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature':80},{'city':'武汉','temperature':70}])
        print(dict.feature_names_)
        print(data)  # ndarray 二维数组
        return None
    
    if __name__=='__main__':
        dictVect()


     输出结果为一个 二维数组

     3.2文本特征抽取及中文问题

    英文文本特征抽取方法:

    实例:

    from sklearn.feature_extraction.text import CountVectorizer
    def countVect():
        """
        对文本进行特征值化
        :return:
        """
        cv=CountVectorizer()
        data=cv.fit_transform(['life is is short , I use python','it is perfect','like it'])
        print(cv.get_feature_names())  # 不统计单个英文字母   统计单词出现的次数
        print(data.toarray())  # sparse矩阵转换为数组
    
        return None
    
    if __name__=='__main__':
     
        #countVect()
    View Code

    中文文本特征抽取方法一:

    (1)准备句子,利用jieba.cut()进行分词

    (2)实例化CountVectorizer

    (3)将分词结果变成字符串作为fit_transform()的输入值

    实例如下:

    from sklearn.feature_extraction.text import CountVectorizer
    import jieba
    def cutWord():
        con1=jieba.cut("今天天气很好,高高兴兴去上学")  # 对汉语句子进行分词  返回的是一个生成器,不是列表
        con2=jieba.cut("人生苦短,珍惜每一天")
        con3=jieba.cut("努力就会有收获,岂能不劳而获")
        # 转换成列表
        content1=list(con1);
        content2 = list(con2);
        content3 = list(con3);
        # 把列表转换为字符串,以空格分隔原来列表中的元素
        c1=' '.join(content1)
        c2=' '.join(content2)
        c3=' '.join(content3)
        return c1,c2,c3
    
    def hanziVector():
        """
        中文特征值化
        :return:
        """
        c1,c2,c3=cutWord()
        print(c1,c2,c3)
    
        cv = CountVectorizer()
        data = cv.fit_transform([c1,c2,c3])
        print(cv.get_feature_names())  # 不统计单个英文字母   统计单词出现的次数
        print(data.toarray())  # sparse矩阵转换为数组
        return None
    
    if __name__=='__main__':
     
        hanziVector()

    运行结果:

     方法二:使用tf*idf来表示某个词在某篇文章中的重要性

    tf (term frequency)   词的频率

    idf(inverse document frequency)逆文档频率   log(总文档数量/该词出现的文档数量)

    如果某个词或者短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语有很好的类别区分度,适合用来分类。

    实例:

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    def cutWord():
        con1=jieba.cut("今天天气很好,高高兴兴去上学")  # 对汉语句子进行分词  返回的是一个生成器,不是列表
        con2=jieba.cut("人生苦短,珍惜每一天")
        con3=jieba.cut("努力就会有收获,岂能不劳而获")
        # 转换成列表
        content1=list(con1);
        content2 = list(con2);
        content3 = list(con3);
        # 把列表转换为字符串,以空格分隔原来列表中的元素
        c1=' '.join(content1)
        c2=' '.join(content2)
        c3=' '.join(content3)
        return c1,c2,c3
    
    def tfIdfVector():
        """
        中文特征值化
        :return:
        """
        c1,c2,c3=cutWord()
        print(c1,c2,c3)
    
        tf=TfidfVectorizer()    # tf*idf  代表的是词的重要性程度
        data = tf.fit_transform([c1,c2,c3])
        print(tf.get_feature_names())  # 不统计单个英文字母   统计单词出现的次数
        print(data.toarray())  # sparse矩阵转换为数组
        return None
    
    
    if __name__=='__main__':
        
        tfIdfVector()
    View Code

    运行结果:

  • 相关阅读:
    java 第三次实验作业关于封装
    java String类实验作业随笔
    java 第一次基础实践
    英语四级冲刺笔记---谓语动词的时态下
    英语四级冲刺笔记——语法篇二
    英语四级冲刺笔记——语法篇一
    java面向对象---对象容器
    java--面向对象---访问属性
    java面向对象---对象初始化
    java面向对象---成员变量和成员函数
  • 原文地址:https://www.cnblogs.com/doctorXiong/p/10579271.html
Copyright © 2020-2023  润新知