🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Python

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

Q&A

解決済

1回答

30073閲覧

math domain errorとエラーが出てくる

kajirita2002

総合スコア14

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

Python

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

0グッド

0クリップ

投稿2019/12/16 06:22

ピアソン係数を使ってLisa RoseとGene Seymourの相関スコアを得たいのですが以下のようなエラーが出てしまいます。 どこが間違っているのかわからない状態です。ご回答のほどよろしくお願いします。
^

python

1critics={'Lisa Rose':{'Lady in the Water':2.5,'Snakes on a Plane':3.5, 2'Just My Luck':3.0, 'Superman Returns':3.5,'You, Me and Dupree':2.5, 3'The Night Listener':3.0}, 4 5'Gene Seymour':{'Lady in the Water':3.0,'Snakes on a Plane':3.5, 6'Just My Luck':3.0, 'Superman Returns':5.0,'You, Me and Dupree':3.5, 7'The Night Listener':3.0}, 8 9'Michael Phillips':{'Lady in the Water':2.5,'Snakes on a Plane':3.0, 10 'Superman Returns':3.5, 11'The Night Listener':4.0}, 12 13'Claudia Puig':{'Snakes on a Plane':3.5, 14'Just My Luck':3.0, 'Superman Returns':4.0,'You, Me and Dupree':2.5, 15'The Night Listener':4.5}, 16 17'Mick LaSalle':{'Lady in the Water':3.0,'Snakes on a Plane':4.0, 18'Just My Luck':2.0, 'Superman Returns':3.0,'You, Me and Dupree':2.0, 19'The Night Listener':3.0}, 20 21'Jack Mtthews':{'Lady in the Water':3.0,'Snakes on a Plane':4.0, 22 'Superman Returns':5.0,'You, Me and Dupree':3.5, 23'The Night Listener':3.0}, 24 25'Toby':{'Snakes on a Plane':4.5, 26 'Superman Returns':4.0,'You, Me and Dupree':1.0,}} 27 28# ここから処理 29 30from math import sqrt 31#person1とperson2の距離を基にした類似性スコアを返す 32def sim_distance(prefs,person1,person2): 33 # 二人とも評価しているリストを得る 34 si={} 35 for item in prefs[person1]: 36 if item in prefs[person2]: 37 si[item]=1 38 39# 両者ともに評価しているものがなければ0を返す 40 if len(si)==0: return 0 41# 全ての差の兵法を足し合わせる 42 sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2) 43 for item in prefs[person1] if item in prefs[person2]]) 44 45 return 1/(1+sum_of_squares) 46 47#ピアソン相関係数 48# p2とP1のピアソン相関係数を返す 49def sim_pearson(prefs,p1,p2): 50 #両者がお互いに評価しているアイテムのリストを取得 51 si={} 52 for item in prefs[p1]: 53 if item in prefs[p2]: si[item]=1 54#要素の数を調べる 55 n=len(si) 56 57 58#ともに評価しているアイテムがなければ0を返す 59 if n==0: return 0 60 61# 全ての嗜好を合計する 62 sum1=sum([prefs[p1][it] for it in si]) 63 sum2=sum([prefs[p2][it] for it in si]) 64#平方を合計する 65 sum1Sq=sum([pow(prefs[p1][it],2) for it in si]) 66 sum2Sq=sum([pow(prefs[p1][it],2) for it in si]) 67#積を合計する 68 pSum=sum([prefs[p1][it]*prefs[p2][it]for it in si]) 69#ピアニソンによるスコアを計算する 70 num=pSum-(sum1*sum2/n) 71 den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n)) 72 if den==0: return 0 73 74 r=num/den 75 76 return r

terminal

1>>> import recommendations 2>>> from importlib import reload 3>>> reload(recommendations) 4<module 'recommendations' from '/Users/kajimurarita/Desktop/python_project/recommendations.py'> 5>>> recommendations.topMatches(recommendations.critics,'Toby',n=3) 6Traceback (most recent call last): 7 File "<stdin>", line 1, in <module> 8 File "/Users/kajimurarita/Desktop/python_project/recommendations.py", line 81, in topMatches 9 scores=[(similarity(prefs,person,other),other) 10 File "/Users/kajimurarita/Desktop/python_project/recommendations.py", line 81, in <listcomp> 11 scores=[(similarity(prefs,person,other),other) 12 File "/Users/kajimurarita/Desktop/python_project/recommendations.py", line 71, in sim_pearson 13 den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n)) 14ValueError: math domain error 15

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

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

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

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

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

guest

回答1

0

ベストアンサー

sqrtの引数にマイナス値((55.0 - 54.0) * (55.0 - 73.5))が入ってる為、定義域エラーになっています。

投稿2019/12/16 06:50

Eggpan

総合スコア3205

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

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

kajirita2002

2019/12/16 12:01

ありがとうございます! 定義域エラーであることを見落としていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問