機械学習の基礎:「特徴量工学(2)―特徴量工学入門、特徴抽出」

1. 特徴量エンジニアリングとは何ですか?

機械学習分野の修士であるアンドリュー・ン教師は、「特徴を考え出すのは難しく、時間がかかり、専門知識が必要です。『応用機械学習』は基本的に特徴エンジニアリングです。」と述べています。データと機能が決める業界
機械学習の上限とモデルとアルゴリズムはこの上限に近づくだけ

特徴量エンジニアリングは、機械学習アルゴリズムにおいて特徴量がより適切な役割を果たすことができるように、専門的な背景知識とスキルを使用してデータを処理するプロセスです。 重要性 : 機械学習の効果に直接影響します

2. 特徴量エンジニアリングには何を使用しますか?

現在はsklearnです

3. 特徴量エンジニアリングの位置とデータ処理の比較

1. pandas は、
データの読み取りと基本的な処理形式に非常に便利なツールです。

2. sklearn は
特徴処理のための強力なインターフェースを提供します

3. 特徴エンジニアリングには、
(1) 特徴抽出
(2) 特徴の前処理
(3) 特徴の次元削減が含まれます。

4. 特徴抽出/特徴抽出
たとえば、英語の短い論文があり、その論文を
機械学習アルゴリズム - 統計手法 - 数式に分類する必要があります。
数式は文字列を扱うことができず、文字列の種類も異なります。数値
問題に変換するのは次のとおりです。 テキスト 型を数値に変換するにはどうすればよいですか?

分類 船舶の位置
質問: タイプを数値に変換しますか?
ワンホットエンコーディングまたはダミー変数

4. 特徴抽出

1. 特徴抽出とは
あらゆるデータ (テキストや画像など) を、機械学習に使用できるデジタル特徴に変換します 注
: 特徴の値化は、コンピューターがデータをよりよく理解するためのものです
(1) 辞書特徴抽出 (特徴の離散化) )
(2)テキスト特徴抽出
(3)画像特徴抽出(ディープラーニング導入予定)

2. 特徴抽出API
sklearn.feature_extraction

5. 辞書特徴抽出

sklearn.feature_extraction.DictVectorizer(sparse=True, ...)
関数: フィールド データの特徴付け

説明:
ベクトルとは、数学ではベクトル、物理学ではベクトル行列のこと
で、2 次元配列ですが、
コンピュータに保存する場合は 1 次元配列に保存することもできます。

1. DicVectorizer.fit_transform(X)
X: 辞書を含むフィールドまたはイテレータ
戻り値: スパース行列を返す

2. DicVectorizer.inverse_transform(X)
X:配列配列または疎行列
戻り値:変換前のデータ形式

3. DicVectorizer.get_feature_names()
戻り値: カテゴリ名を返します。

4. 例
以下のデータに対して特徴抽出を行います。

[{'city': '北京','temperature':100}
{'city': '上海','temperature':60}
{'city': '深圳','temperature':30}]

上の行が feature_names、下の 3 行がデータです。
説明すると、都市が 3 つある場合、0 が 3 つあり、辞書の順序にある​​ 0 が 1 になります。バイナリ エンコードのサンプル
が3 行 2 列の行列。辞書特徴抽出後、サンプル サイズは 4 列になり、
都市カテゴリはワンホット エンコーディングに変換されます。

5. day01_machine_learning.py を変更する

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer

def datasets_demo():
    """
    sklearn数据集使用
    """
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    print("查看数据集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值几行几列:\n", iris.data.shape)
   
    #数据集的划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("训练集的特征值:\n", x_train, x_train.shape)

    return None

def dict_demo():
    """
    字典特征抽取
    """
    data = [{'city': '北京','temperature':100},{'city': '上海','temperature':60},{'city': '深圳','temperature':30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer()

    # 2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None

if __name__ == "__main__":
    # 代码1:sklearn数据集使用
    #datasets_demo()
    # 代码2:字典特征抽取
    dict_demo()

操作結果:

data_new:
   (0, 1)	1.0
  (0, 3)	100.0
  (1, 0)	1.0
  (1, 3)	60.0
  (2, 2)	1.0
  (2, 3)	30.0

この結果が発生する理由:
この API が渡さ
れた

data_new:
 [[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]

スパース行列の見方: 行列によっては、0 以外の要素が 0 要素よりもはるかに少ない場合があります。一般的な保存方法: トリプレット メソッド (行、列、要素値) は、
疎行列内のゼロ以外の要素の位置と対応する値をマークします。平たく言えば、行 0 と列 1 の値は 1 です。期待される結果 ここで見つけることができます。
利点は、メモリを節約し、読み込み効率を向上させることです。

印刷機能名を追加します:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer

def datasets_demo():
    """
    sklearn数据集使用
    """
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    print("查看数据集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值几行几列:\n", iris.data.shape)
   
    #数据集的划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("训练集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    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__":
    # 代码1:sklearn数据集使用
    #datasets_demo()
    # 代码2:字典特征抽取
    dict_demo()
data_new:
 [[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]
特征名字:
 ['city=上海', 'city=北京', 'city=深圳', 'temperature']

6. テキスト特徴抽出

1. 機能:
テキストデータを特徴づける
単語を特徴として利用し、特徴語を

2. メソッド 1: CountVectorizer
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
戻り値: 単語頻度行列を返す

3. CountVectorizer.fit_transform(X)
X: テキスト、またはテキスト文字列を含む反復可能なオブジェクト
戻り値: スパース行列を返します。

4. CountVectorizer.inverse_transform(X)
X:配列配列または疎行列
戻り値:変換前のデータ形式

5. CountVectorizer.get_feature_names()
戻り値: 単語リスト

6. 例:
以下のデータから特徴を抽出してみましょう

["life is short,i like python",
"life is too long,i dislike python"]

なぜ i がないのでしょうか? API が設計されたとき、単語の分類やセンチメント分析はあまり重要ではないと考えられていたためです。

7. day01_machine_learning.py を変更します

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer

def datasets_demo():
    """
    sklearn数据集使用
    """
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    print("查看数据集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值几行几列:\n", iris.data.shape)
   
    #数据集的划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("训练集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    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

def count_demo():
    """
    文本特征抽取
    """
    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__":
    # 代码1:sklearn数据集使用
    #datasets_demo()
    # 代码2:字典特征抽取
    #dict_demo()
    # 代码3:文本特征抽取
    count_demo()

操作結果:

data_new:
 [[0 1 1 2 0 1 1 0]
 [1 1 1 0 1 1 0 1]]
特征名字:
 ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

各サンプル内の特徴語の出現数をカウントします。

8. 中国語テキスト特徴抽出

質問: データを中国語に置き換えるとどうなりますか?
その結果、文全体が 1 つの単語として扱われ、手動ブランキングでは単一の中国語単語がサポートされなくなります。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer

def datasets_demo():
    """
    sklearn数据集使用
    """
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    print("查看数据集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值几行几列:\n", iris.data.shape)
   
    #数据集的划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("训练集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    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

def count_demo():
    """
    文本特征抽取
    """
    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

def count_chinese_demo():
    """
    中文文本特征抽取
    """
    data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
    # 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__":
    # 代码1:sklearn数据集使用
    #datasets_demo()
    # 代码2:字典特征抽取
    #dict_demo()
    # 代码3:文本特征抽取
    #count_demo()
    # 代码4:中文文本特征抽取
    count_chinese_demo()

操作結果:

data_new:
 [[1 1 0]
 [0 1 1]]
特征名字:
 ['北京', '天安门', '太阳']

9. CountVectorizer の Stop_words stop_words
: ストップワード
最終的な分類に有益ではない単語も含まれると思われるので、ストップワードリストを検索することができます。

10. 次の 3 つの文を固有値に変換します

今日は残酷です、明日はさらに残酷です、そして明後日は素晴らしいでしょう、
しかし彼らのほとんどは明日の夜に死ぬでしょう、だから今日をあきらめないでください。

私たちが遠くの銀河から見る光は何百万年も前に発せられたものである
ため、私たちが宇宙を見るとき、私たちはその過去を見ていることになります。

何かを一方的に理解するだけでは、本当に理解することはできません。
何かが本当に意味するものを理解する秘訣は、それが私たちの知っていることとどのように関係しているかによって決まります。

(1) 文章を準備し、単語分割にjieba.cutを使用し、ライブラリをインストールします: pip3 install jieba
(2) CountVectorizerをインスタンス化します
(3) 単語分割結果をfit_transformの入力値として文字列に変換します

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer
import jieba

def datasets_demo():
    """
    sklearn数据集使用
    """
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    print("查看数据集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值几行几列:\n", iris.data.shape)
   
    #数据集的划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("训练集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    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

def count_demo():
    """
    文本特征抽取
    """
    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

def count_chinese_demo():
    """
    中文文本特征抽取
    """
    data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
    # 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

def cut_word(text):
    """
    进行中文分词
    """
    return " ".join(list(jieba.cut(text)))  #返回一个分词生成器对象,强转成list,再join转成字符串

def count_chinese_demo2():
    """
    中文文本特征抽取,自动分词
    """
    # 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.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

if __name__ == "__main__":
    # 代码1:sklearn数据集使用
    #datasets_demo()
    # 代码2:字典特征抽取
    #dict_demo()
    # 代码3:文本特征抽取
    #count_demo()
    # 代码4:中文文本特征抽取
    #count_chinese_demo()
    # 代码5:中文文本特征抽取,自动分词
    count_chinese_demo2()
    # 代码6: 测试jieba库中文分词
    #print(cut_word("我爱北京天安门"))

結果:

Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 1.304 seconds.
Prefix dict has been built successfully.
['今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 前 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']
data_final:
 [[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
 [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
 [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]
特征名字:
 ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']

この方法は、記事内に単語が出現する回数に基づいています。ただし、「私たち」や「あなた」などの一部の単語は、すべての記事で何度も登場します。特定のカテゴリの記事では何度も出現するが、他のカテゴリの記事ではめったに出現しないことを推奨します。このように、単語はより有益です。私たちの分類に。
このキーワードを見つけてください。TfidfVectorizer の導入

11、方法二:TfidfVectorizer
sklearn.feature_extraction.text.TfidfVectorizer

12. Tf-idf テキスト特徴抽出
(1) TF-IDF の主な考え方は、ある単語またはフレーズが記事に出現する可能性が高く、他の記事ではめったに出現しない場合、その単語またはフレーズが考慮されるということです。カテゴリ識別能力が高く、分類に適しています。
(2) TF-IDF 関数: 文書セットまたはコーパス内の文書の 1 つに対する単語の重要性を評価するために使用されます。

13. Tf-idf 式
(1) 用語頻度 (tf) は、文書内に出現する特定の単語の頻度を指します。
(2) 逆文書頻度 (idf) は、性別の単語尺度の普遍的な重要性です。特定の単語の idf は、ファイルの総数をその単語を含むファイルの数で割った後、10 を底とする対数を取って商を求めることで取得できます (3) 最終的な結果は次数として理解できます。
重要

注: 文書内の総単語数が 100 で、「非常に」という単語が 5 回出現する場合、文書内の「非常に」という単語の単語頻度は 5/100=0.05 になります。ファイル頻度 (IDF) を計算する方法は、ファイル セット内のファイルの総数を、「非常に」という単語が出現するファイルの数で割ることです。したがって、「非常に」という単語が 1,000 個の文書に出現し、文書の総数が 10,000,000 である場合、逆文書頻度は lg (10,000,000 / 1,0000) = 3 となります。最後に、このドキュメントの tf-idf の「非常に」スコアは 0.05 * 3=0.15 です。

14. Tf-idf は重要度を表す
2 単語: 経済、非常に
1000 記事 - コーパス
100 記事 - 非常に
10 記事 - 経済
2 記事
記事 A (100 単語): 10 倍経済
    tf: 10/100 = 0.1
    idf: log 10 (1000 / 10) = 2
    tf-idf: 0.2
記事 B (100 ワード): 10 倍
    tf: 10 / 100 = 0.1
    idf: log 10 (1000 / 100) = 1
    tf-idf :0.1
    対数?
        2 ^ 3 = 8
        log 2 (8) = 3
        log 10 (10) = 1

15. API
sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None,...)
戻り値: 単語の重み行列を返します。

16. TfidfVectorizer.fit_transform(X)
X: テキスト文字列を含むテキストまたは反復可能なオブジェクト
戻り値: スパース行列を返します。

17. TfidfVectorizer.inverse_transform(X)
X:配列配列または疎行列
戻り値:変換前のデータ形式

18. TfidfVectorizer.get_feature_names()
戻り値: 単語リスト

19. 特徴抽出に tfidf を使用する

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
import jieba

def datasets_demo():
    """
    sklearn数据集使用
    """
    #获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n", iris)
    print("查看数据集描述:\n", iris["DESCR"])
    print("查看特征值的名字:\n", iris.feature_names)
    print("查看特征值几行几列:\n", iris.data.shape)
   
    #数据集的划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
    print("训练集的特征值:\n", x_train, x_train.shape)

    return None
 
def dict_demo():
    """
    字典特征抽取
    """
    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

def count_demo():
    """
    文本特征抽取
    """
    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

def count_chinese_demo():
    """
    中文文本特征抽取
    """
    data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
    # 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

def cut_word(text):
    """
    进行中文分词
    """
    return " ".join(list(jieba.cut(text)))  #返回一个分词生成器对象,强转成list,再join转成字符串

def count_chinese_demo2():
    """
    中文文本特征抽取,自动分词
    """
    # 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.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

def tfidf_demo():
    """
    用tf-idf的方法进行文本特征抽取
    """
    # 1、将中文文本进行分词
    data = ["今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
        "我们看到的从很远星系来的光是在几百万年前之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
        "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    print(data_new)
    # 2、实例化一个转换器类
    transfer = TfidfVectorizer()
    # 3、调用fit_transform()
    data_final = transfer.fit_transform(data_new)
    print("data_final:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())
    return None

if __name__ == "__main__":
    # 代码1:sklearn数据集使用
    #datasets_demo()
    # 代码2:字典特征抽取
    #dict_demo()
    # 代码3:文本特征抽取
    #count_demo()
    # 代码4:中文文本特征抽取
    #count_chinese_demo()
    # 代码5:中文文本特征抽取,自动分词
    #count_chinese_demo2()
    # 代码6: 测试jieba库中文分词
    #print(cut_word("我爱北京天安门"))
    # 代码7:用tf-idf的方法进行文本特征抽取
    tfidf_demo()

結果:

Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 1.415 seconds.
Prefix dict has been built successfully.
['今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。', '我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 前 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。', '如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。']
data_final:
 [[0.         0.         0.21821789 0.         0.         0.
  0.43643578 0.         0.         0.         0.         0.
  0.21821789 0.         0.21821789 0.         0.         0.
  0.         0.21821789 0.21821789 0.         0.43643578 0.
  0.21821789 0.         0.43643578 0.21821789 0.         0.
  0.         0.21821789 0.21821789 0.         0.         0.        ]
 [0.         0.         0.         0.2410822  0.         0.
  0.         0.2410822  0.2410822  0.2410822  0.         0.
  0.         0.         0.         0.         0.         0.2410822
  0.55004769 0.         0.         0.         0.         0.2410822
  0.         0.         0.         0.         0.48216441 0.
  0.         0.         0.         0.         0.2410822  0.2410822 ]
 [0.15698297 0.15698297 0.         0.         0.62793188 0.47094891
  0.         0.         0.         0.         0.15698297 0.15698297
  0.         0.15698297 0.         0.15698297 0.15698297 0.
  0.1193896  0.         0.         0.15698297 0.         0.
  0.         0.15698297 0.         0.         0.         0.31396594
  0.15698297 0.         0.         0.15698297 0.         0.        ]]
特征名字:
 ['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']

20. Tf-idf の重要性、
記事分類における初期データ処理のための分類機械学習アルゴリズム。
 

おすすめ

転載: blog.csdn.net/csj50/article/details/131556498