zoukankan      html  css  js  c++  java
  • 第一天学习进度--文本处理基础知识学习

    参考教程--python机器学习基础教程

    首先在对应目录创建一个文件夹,里面放上对应分类名称(非中文)的文件夹,这个步骤是要读取对应类型的数据。

    结构如下图所示:

     我在txttype中放置了两个分类的文件夹,每个类别的文件夹中放置了对应类型的文本(数量不限),每个需要训练的语句都单独作为一个文本,文本的名称不做具体要求。

    在python中写入对应的代码:

    from sklearn.datasets import load_files
    import numpy as np
    #加载数据集
    reviews_train = load_files(r"C:UsersHaloDesktop1.6项目开发过程 xttype")
    # load_files返回一个Bunch对象,其中包含训练文本和训练标签
    text_train, y_train = reviews_train.data, reviews_train.target
    print("文本序列类型: {}".format(type(text_train)))
    print("文本序列长度: {}".format(len(text_train)))
    # print("text_train[1]: {}".format(text_train[1]))
    #数据清洗
    text_train = [doc.replace(b"<br />", b" ") for doc in text_train]
    print("每个类型的样本: {}".format(np.bincount(y_train)))
     

    可以发现对应的文本文件已经被正确读取

     接着进行第二步,将文本数据转化为词袋

    计算词袋在书中的步骤原话为:

    计算词袋表示包括以下三个步骤。
    (1) 分词(tokenization) 。将每个文档划分为出现在其中的单词 [ 称为词例(token)],比如 按空格和标点划分。

    (2) 构建词表(vocabulary building)。收集一个词表,里面包含出现在任意文档中的所有词, 并对它们进行编号(比如按字母顺序排序)。

    (3) 编码(encoding)。对于每个文档,计算词表中每个单词在该文档中的出现频次

     将上述的过程合并之后:

    from sklearn.feature_extraction.text import CountVectorizer
    
    bards_words =["The fool doth think he is wise,",
                  "but the wise man knows himself to be a fool"]
    #切词
    vect = CountVectorizer()
    vect.fit(bards_words)
    print("Vocabulary size: {}".format(len(vect.vocabulary_)))
    print("Vocabulary content:
     {}".format(vect.vocabulary_))
    #词袋应用
    bag_of_words = vect.transform(bards_words)
    print("bag_of_words: 
    {}".format(repr(bag_of_words.toarray())))

    上述是对于该用法的简单应用,下面将配合参数调节对数据进行读取。

    可以先获取前20个特征

    #切词并获得词袋
    vect = CountVectorizer().fit(text_train)
    #应用词袋
    X_train = vect.transform(text_train)
    print("X_train:
    {}".format(repr(X_train)))
    
    #获得文本特征
    feature_names = vect.get_feature_names()
    print("特征数量: {}".format(len(feature_names)))
    print("前20个特征:
    {}".format(feature_names[:20]))

    运行结果:

     接着对模型进行评估:

    from sklearn.model_selection import cross_val_score
    from sklearn.linear_model import LogisticRegression
    #交叉验证对LogisticRegression进行评估
    scores = cross_val_score(LogisticRegression(), X_train, y_train, cv=5)
    print("平均交叉验证精度: {:.2f}".format(np.mean(scores)))

    运行结果:

     在利用交叉验证调节正则化参数C:

    #交叉验证调节正则化参数C
    from sklearn.model_selection import GridSearchCV
    param_grid = {'C': [0.001, 0.01, 0.1, 1, 10]}
    grid = GridSearchCV(LogisticRegression(), param_grid, cv=5)
    grid.fit(X_train, y_train)
    print("最好的交叉验证分数: {:.2f}".format(grid.best_score_))
    print("最好参数值: ", grid.best_params_)

    运行结果:

     接下来将数据应用到实际的测试集合上上看看该性能指标:

    #加载测试集
    reviews_test = load_files(r"C:UsersHaloDesktop1.6项目开发过程	xttest")
    text_test, y_test = reviews_test.data, reviews_test.target
    print("测试集数量: {}".format(len(text_test)))
    print("文本序列长度: {}".format(np.bincount(y_test)))
    text_test = [doc.replace(b"<br />", b" ") for doc in text_test]
    #在测试集上评估参数泛化性能
    X_test = vect.transform(text_test)
    print("测试集评估参数泛化性能:{:.2f}".format(grid.score(X_test, y_test)))

    运行结果:

     若数据过多,则可以对数据进行清洗:

    #集合清洗
    vect = CountVectorizer(min_df=5).fit(text_train)
    X_train = vect.transform(text_train)
    print("min_df: {}".format(repr(X_train)))
    feature_names = vect.get_feature_names()
    print("前50个特征:
    {}".format(feature_names[:50]))
    #再次用玩个搜索看模型性能
    grid = GridSearchCV(LogisticRegression(), param_grid, cv=5)
    grid.fit(X_train, y_train)
    print("最好交叉验证分数: {:.2f}".format(grid.best_score_))

    运行结果:

  • 相关阅读:
    使用java中的注解@see
    MacOS软件默认安装路径
    学习MACD指标
    go CD 用虚拟机快速增加一个新agent
    git推送本地分支到远程分支
    git如何切换远程仓库
    git命令查看远程分支
    Java 学习札记(一)JDK安装配置
    Oracle 基本操作符
    C# 常用控件属性及方法介绍
  • 原文地址:https://www.cnblogs.com/halone/p/12557493.html
Copyright © 2011-2022 走看看