2017-05-31 4 views
-1

私のトレーニングデータセットと確率計算に基づいて、ある値を予測しています。それらを合計すると、常に1または100%を与えます。 これは私のトレーニングデータです確率の合計は、PythonのSGDClassifierで常に1(100%)を返します

Address              Location_ID 
Arham Brindavan,plot no.9,3rd road Near ls Stn,cannop   4485 
Revanta,Behind nirmal puoto Mall, G-M link Road, Mulund(W)  10027 
Sandhu Arambh,Opp St.Mary's Convent, rose rd, Mulund(W)  10027 
Naman Premirer, Military Road, Marol Andheri E     5041 
Dattatreya Ayuedust Adobe Hanspal, bhubaneshwar    6479 

これは私のテストデータ

Address               Location_ID 
Tata Vivati , Mhada Colony, Mulund (E), Mumbai      10027 
Evershine Madhuvan,Sen Nagar, Near blue Energy,Santacruz(E)  4943 

これは私が

import pandas as pd 
import numpy as np 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.linear_model import SGDClassifier 

data=pd.read_csv('D:/All files/abc.csv') 
msk = np.random.rand(len(data)) < 0.8 
data_train = data[msk] 
data_train_add = data_train.ix[:,0] # divide dataset into training set 
data_train_loc = data_train.ix[:,1] 

data_test1 = data[~msk] 
data_test = data_test1.ix[:,0] # divide dataset into testing set    

data_train_add = np.array(data_train_add) 
data_train_loc = np.array(data_train_loc) 

count_vect = CountVectorizer(ngram_range=(1,3)) 
X_train_counts = count_vect.fit_transform(data_train_add.ravel()) 

tfidf_transformer = TfidfTransformer() 
data_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 

clf_svm = SGDClassifier(loss='log', penalty='l2', alpha=1e-3, n_iter=5, random_state=42).fit(data_train_tfidf, data_train_loc.ravel()) 

X_new_counts = count_vect.transform(data_test.ravel()) 
X_new_tfidf = tfidf_transformer.transform(X_new_counts) 
predicted_svm = clf_svm.predict(X_new_tfidf) 

clf_svm_prob=clf_svm.predict_proba(X_new_tfidf) 
prob_sum=clf_svm_prob.sum(axis=1) 
print(prob_sum) 
O/P 
array([ 1., 1., 1., 1.]) 
を試してみましたが、何であります

なぜ1または100%の確率を与えているのですか?どのパラメータを確率の合計を得るために変更する必要がありますか?提案は ありがとうございます。

+0

このサンプルのすべてのクラスの確率を合計しています。明らかにそれは1になるだろう。あなたは何を期待していますか?もう少し説明してもらいたいですか?すべてのテストサンプルで単一のクラスの確率を合計しますか? –

+0

@VivekKumarはい私はそれが私に各単語のテスト記録の確率の合計を与えるべきであると期待しています...例えばこのテストのためにデータレコード(単語) "Tata Vivati、Mhada Colony、Mulund(E)ムンバイ "の場合、確率は0.00023,0.07693,0.28811,0.198827,0.123121,0.05920であり、これらの確率のみを加算する必要があります(上記の値を合計すると約0.737または73%になります)。 – deepesh

+1

' clf_svm'は分類推定子です。確率は単語だけを出力しません。私は単語の確率によって何を意味するのか理解できません。 –

答えて

1

トレーニングしているモデルがであり、これは差別的なではありません。generativeです。だから、あなたが取得している確率は

[P(label1 | x), P(label2 | x), ..., P(labelK | x)] 

と(可能な値labelKにLABEL1の有限集合以上)、そのような確率分布のためのものです。

SUMi P(labeli | x) = 1 

弁別モデルはないモデルP(X)を行い、この量を表すことができ、その中に文字通り何もありません。どうして?これは学習をはるかに容易にし、ラベル/値だけを気にしていればP(X)は必要ありません。その後、

P(X) = SUMi P(x|labeli) P(labeli) 

しかしP(x|labeli)は、いずれかの差別モデルでどこにも見つからないので、|あなたがした後は何

は反対の数量P(LABEL1 x)があります。したがって、P(X)へのアクセスが必要な場合は、GMM、Naive Bayesなどを使用して明示的に学習する必要がありますが、これは現在使用しているロジスティック回帰(識別モデルです)ではありません。

関連する問題