pythonで作成した2つのリスト(予測値/真値)があります。それぞれワードが各行に5つ入っており、同一ワードが入っている確率(重複率/合致率)を知りたいです。目視では「おいしそう」など重複もあるのですが、どうしても重複リストが空になります。とりあえずそのまま重複率計算まで進めましたが、合っているか不明です。またかなり冗長なのでわかりやすく処理できるコードもご教示いただけると幸いです。
試行したこと/悩み
(悩み1)重複リスト(true_lst)が空になる
(悩み2)重複率の計算が合っているか不明。
python
list_a(予測値:5×5): [['おいしそう', 'こわだり', '飲みもの', '爽やか・さっぱり', '冷たい'], ['おいしそう', '飲みもの', '季節', '色・色合い', '爽やか・さっぱり'], ['なじみ', '好み', '濃厚', '風味', '目立つ'], ['おいしそう', '安心・信頼', '飲みもの', '好み', '親しみ・懐かしい'], ['おいしそう', 'こわだり', '飲みもの', '形状', '爽やか・さっぱり']] list_b(真値:5×5): [['おいしそう', '色・色合い', '洗練', '爽やか・さっぱり', '優しい'], ['おいしそう', 'シンプル', 'わかる', '高級', '文字・字体'], ['おいしそう', 'わかる', '菓子', '画像・イラスト', '色・色合い'], ['おいしそう', 'わかる', '果実・果実感・みずみずしさ', '画像・イラスト', '色・色合い'], ['おいしそう', 'わかる', '可愛い', '色・色合い', '野菜']] list_a_df = pd.DataFrame(list_a) list_b_df = pd.DataFrame(list_b) true_lst = [] #重複リスト false_lst = [] #非重複リスト n = len(list_a) for i in range(n): for tag_a in list_a_df.iloc[i]: if tag_a in list_b_df.iloc[i]: true_lst.append(tag_a) else: false_lst.append(tag_a) #true_lst=[] empty #false_lst = 25 #以下、重複率計算(真値list_bとの重複) #リスト内の全要素数をカウント def my_len(l): count = 0 if isinstance(l, list): for v in l: count += my_len(v) return count else: return 1 list_b_count = my_len(list_b) true_lst_count = my_len(true_list) accuracy = true_lst_count/list_b_count
色々探ってみましたが、かなりスタックしています。
アドバイスのほど、どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー