質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Python

    11244questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • 機械学習

    935questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • 自然言語処理

    147questions

    自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

tfidfのこーどで素数名と計算結果の関係

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 104

s に入るデータは、mecabによって分かち書きさえれた日本語の文章がリストではいっています。
なぜか、アウトプットの数をカウントするとずれます。
色々、試してやっいますが、少ない量だと差分がでないです。
何が原因がお気づきの方、ご教示頂けると大変助かります。

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(s)
data = X.data
features = vectorizer.get_feature_names()
output = [(data[i], features[i]) for i in range(len(data))]

> data
array([0.04610715, 0.05050163, 0.04156941, ..., 0.04623194, 0.04623194,
       0.04623194])
> len(data)
2012
> len(features)
1088
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • quiqui

    2019/04/16 09:06

    タグの 機械語 は 機械学習 を付けようとして間違えたのではないでしょうか?

    キャンセル

  • sequelanonymous

    2019/04/16 10:17

    > タグの 機械語
    とは、どのことを言っていますでしょうか?

    キャンセル

  • quiqui

    2019/04/16 10:56

    質問のタグが Python 自然言語処理 機械語 になってますよ。

    キャンセル

  • sequelanonymous

    2019/04/16 13:17

    ありがとうございます。修正しました

    キャンセル

回答 3

+1

TfidfVectorizer詳しくないですが、単に単語が重複しているからではないでしょうか?

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(['今日 から 働く きっと 働く', '明日 から また 天気 が よく なる', 'これから 頑張る'])
data = X.data
features = vectorizer.get_feature_names()
#output = [(data[i], features[i]) for i in range(len(data))]
print(data)          # [0.38988801 0.29651988 0.77977602 0.38988801 0.32200242 0.42339448
                     #  0.42339448 0.42339448 0.42339448 0.42339448 0.70710678 0.70710678]
print(features)      # ['から', 'きっと', 'これから', 'なる', 'また', 'よく', '今日', '働く', '天気', '明日', '頑張る']
print(len(data))     # 12
print(len(features)) # 11

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/15 21:50 編集

    お気づきありがとうございます。確認してみましたが、以下のような結果になりました。
    len(set(data))
    424
    len(set(features))
    1088

    もしかしたら、私のデータの入れ方がおかしいのかもしれません。
    私はいかのように分かち書きをしていれています。複数の文章, でわけて、単語間は、スペースで分かち書きしてinputしています。
    ['今日 から 働く きっと 働く’, '明日 から また 天気 が よく なる', 'これから 頑張る']

    なにか、お気づきの点ありましたらご指摘して頂けると助かります。

    キャンセル

  • 2019/04/15 22:05

    > 私はいかのように分かち書きをしていれています。複数の文章, でわけて、単語間は、スペースで分かち書きしてinputしています。
    ['今日 から 働く きっと 働く’, '明日 から また 天気 が よく なる', 'これから 頑張る']

    上記に合わせ回答コードを修正しました。
    このコード結果でいくとdataの要素数は分かち書きされた単語数、featuresの要素数は重複を除いた単語数になっているかと思います。

    なお、data変数値が何を表すか忘れてしまったのですが、単純にset(data)すると単純に同じ数値の重複を除くことになるので不味いような気がします。
    もし何か分かれば、またコメントできればと思います。

    キャンセル

  • 2019/04/16 10:19

    ありがとうございます。
    len(vectorizer.vocabulary_)とlen(vectorizer.idf_)で正しい数が取れました。
    となると、X.dataがなんのデータだったのかいまいち不明のままですが。

    キャンセル

  • 2019/04/16 11:01

    quiquiさんの回答どおり、(私も含め)ちゃんとマニュアルを読むべきでしょうね。

    キャンセル

+1

fit_transformの返り値が何かを調べていないのが問題。

fit_transformの返り値はscipy.sparse.csr_matrix型つまりsparse matrix(疎な行列)で、大部分が0な行列を効率よく表現するためのデータ構造。data属性は「データがあるところ」の分のデータだけが格納されている。

https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html
の例を見るべき。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/16 10:18

    ありがとうございます。すみません、データのないところとは、どういうケースのことでしょうか?

    キャンセル

  • 2019/04/16 10:51

    0 のところ

    キャンセル

  • 2019/04/16 13:17

    ありがとうございます。理解しました。

    キャンセル

check解決した方法

0

countvectorizerを利用することで本題の質問の本質を解決しました。

tfのデータ個数は以下。

    from sklearn.feature_extraction.text import CountVectorizer
    import numpy as np

    c_vec = CountVectorizer()
    bag_of_words = c_vec.fit_transform(texts)
    one_hot_vector = bag_of_words.toarray()
    one_hot_vector_count = np.sum(a=one_hot_vector, axis=0)

    for word, count in zip(c_vec.get_feature_names(), one_hot_vector_count):
        print(word, count)

idfのデータ個数は以下。

from sklearn.feature_extraction.text import TfidfVectorizer
t_vec = TfidfVectorizer(token_pattern=r"(?u)\b\w\w+\b")

len(t_vec.vocabulary_)
len(t_vec.idf_)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/16 13:23 編集

    tfもidfも要らなかった(=欲しいのはtf-idfで重みがついた文書ベクタじゃなかった)ということ?

    キャンセル

  • 2019/04/16 14:35

    なるほど、tf-idfで計算済みの文書ベクタが欲しかったのではなくて、ボキャプラリのidfと、(tfの計算に使う)文書中の単語出現頻度を別々に取得したかったのですね。

    キャンセル

  • 2019/04/16 14:38

    tf-idfについて勉強し始めたばかりだったのでその辺をはっきり明確にわけて質問できませんでした。コメントありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • Python

    11244questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • 機械学習

    935questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • 自然言語処理

    147questions

    自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。