-1
関数calc_class
によって生成された値を追加しようとしていますが、機能していないため、理由がわかりません。私はnumpy.append
,numpy.insert
と組み込みのPython関数append
を使用しようとしましたが失敗しました。numpy配列に要素を追加できません
これは、コードの私の作品です:
def calc_class(test):
expec = []
for new in test:
prob_vector = np.zeros((len(voc)), dtype=bool) #define a 'True' array to store class probabilities
words_in_new = new[0].split() #split the new email into words
words_in_new = list(set(words_in_new)) #remove duplicated words
i = 0
for voc_word in voc: #for each element in voc
if voc_word in words_in_new:
prob_vector[i] = True #set the ith element of prob_vector to True, if voc element is in word
else:
prob_vector[i] = False #set the ith element of prob_vector to False, otherwise
i += 1
prob_ham = 1
for i in range(len(prob_vector)):
if prob_vector[i] == True:
prob_ham *= ham_class_prob[i]
else:
prob_ham *= (1 - ham_class_prob[i])
# alternative: np.prod(ham_class_prob[np.where(prob_vector==True)]) * np.prod(1- ham_class_prob[np.where(prob_vector==False)])
prob_spam = 1
for i in range(len(prob_vector)):
if prob_vector[i] == True:
prob_spam *= spam_class_prob[i]
else:
prob_spam *= (1 - spam_class_prob[i])
p_spam = 0.3
p_ham = 1 - p_spam
p_spam_given_new = (prob_spam * p_spam)/(prob_spam * p_spam + prob_ham * p_ham) # Bayes theorem
print('p(spam|new_email)=', p_spam_given_new[0])
expec.append(p_spam_given_new[0])
print(expec)
問題はprint(expect)
は空の配列を印刷しているということです。
(a)質問に表示されているインデント(第三者が編集する前)が間違っていました。インデントを実際に使用しているファイルのインデントと一致させます。あなたが本当に使用しているインデントを推測するように私たちに依頼しないでください。 (b) 'voc'は定義されません。 (c)将来、質問をする前に、[最小限で完全で検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)をお読みください。 – John1024
'append'の前の' print'は何かを生成しますか? – hpaulj
あなたのコードには 'test'、' voc'など4つの未知の変数があります。関数は何も返しません。 'expec.append'は問題ではありません。関数内のその点に到達するだけで問題になります。 – hpaulj