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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

Q&A

1回答

1381閲覧

コサイン類似度が一定以上のものを絞る方法

handake

総合スコア1

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

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

0グッド

0クリップ

投稿2021/12/20 10:01

(人,アイテムデータ,評価点)という形のデータセットからコサイン類似度を求めて、そこからコサイン類似度が一定の角度以上あるものをソートしたいと思っています(例えばコサイン類似度が0.8以上に設定したり)。
以前、同じ形のデータセットでコサイン類似度を作りたいを思い質問して回答をもらい、同じ形で実装したものが以下のものになります。

下記のコードでは、人1と人2の角度を求めていますが、それを人1から似た類似度から指定した類似度以上の人を上からソートしたいです。

試したこと
cos_similarity > 0.8などやったところ「floatと関数は比較できない」の旨のエラーコードが出ました。

python

1def cos_similarity(person1, person2): 2 person1_reviews = dataset[person1] 3 person2_reviews = dataset[person2] 4 5 # 共通のものを取得 6 both_rated = person1_reviews.keys() & person2_reviews.keys() 7 if not both_rated: 8 return 0 # 共通のものが存在しない場合 9 10 # 共通のものの点数をそれぞれ取得 11 scores1 = [person1_reviews[item] for item in both_rated] 12 scores2 = [person2_reviews[item] for item in both_rated] 13 for item, score1, score2 in zip(both_rated, scores1, scores2): 14 15 # コサイン類似度の算出 16 cos_similarity = np.dot(scores1, scores2) / (np.linalg.norm(scores1) * np.linalg.norm(scores2)) 17 18 return cos_similarity

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

datasetがリストとか配列なら、

python

1cos_similarity(0, 1) > 0.8

のように、二人の人のcos_similarityを計算してから0.8と比較してください。

  • 1人の人からコサイン類似度が0.8を基準にそれ以下は足きりにするということがやりたいです。

答えを丸ごと教えるのは良くないので、類題を書いておきますので参考にしてください。
これで分からないなら、基礎から勉強し直すことをお勧めします。

python

1>>> data = [0, 15, 3, 8, 19] 2>>> 3>>> for i in data: 4... print(i,'よりも大きい数は', [j for j in data if i < j], 'です') 5... 60 よりも大きい数は [15, 3, 8, 19] です 715 よりも大きい数は [19] です 83 よりも大きい数は [15, 8, 19] です 98 よりも大きい数は [15, 19] です 1019 よりも大きい数は [] です

投稿2021/12/20 10:12

編集2021/12/20 11:49
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

handake

2021/12/20 11:02

回答ありがとうございます。 しかしながら、そのやり方だと指定した2人のコサイン類似度が0.8以上ということだと思うのですが、自分がやりたいことは指定した1人の人からコサイン類似度が0.8を基準にそれ以下は足きりにするということがやりたいです。 一つ考えられるのは、other_personをother_person!=person1で新しく用意してcos_similarity(person1,other_person)で定義するということが考えられたんですが、初心者ゆえになかなかうまくいかないです。 人1人を指定して、0.8以上のコサイン類似度を持っている人のみを算出したいです。 cos_similarityの変数を2つではなく、1つにして1つの変数の人と、それぞれの他の人とcos_similarityを求めて0.8以上という形にしたいです。 データセットはリストの形式です。 初心者で言葉が全てあっているか分からないですが伝われば幸いです。
ppaul

2021/12/20 11:49

回答に追加しました。
handake

2021/12/21 10:01

回答ありがとうございました。 何度目かは分からないですが、応用に徐々に発達していく方法もわからないので何もかも手探りで途中であきらめると思いますが、また基礎からやり直してみます。 多分プログラム向いていないので、出しゃばらないでほどほどに一人で考えながらやってみます。 とにもかくにも回答にはとても感謝しています。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問