2017-05-31 1 views
-1

Ich prognostiziere einen Wert basierend auf meinem Trainingsdatensatz und Berechnung Wahrscheinlichkeit, summiert sie, die mir immer 1 oder 100% Dies ist meine TrainingsdatenSumme der Wahrscheinlichkeit gibt immer als 1 (100%) in SGDClassifier in Python

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 

dies ist meine Testdaten

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

Dies ist, was ich

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.]) 
versucht haben,

Warum gibt es 1 oder 100% Wahrscheinlichkeit, welchen Parameter sollte ich ändern, um die Summe der Wahrscheinlichkeit richtig zu bekommen ... bitte schlagen Sie Vielen Dank im Voraus.

+0

Es ist die Summe der Wahrscheinlichkeiten aller Klassen für diese Probe. Offensichtlich wird es 1. Was erwartest du? Kannst du etwas mehr erklären, was du erreichen wolltest? Möchten Sie die Wahrscheinlichkeiten einer einzelnen Klasse für alle Testproben summieren? –

+0

@VivekKumar ja Ich erwarte, dass es mir die Summe der Wahrscheinlichkeit der Testaufzeichnung jedes Wortes geben sollte ... zum Beispiel, wenn für diesen Test Datensätze (Wörter) "Tata Vivati, Mhada Kolonie, Mulund (E), Mumbai ", die Wahrscheinlichkeit ist 0,00023,0,07693,0,28811,0,198827,0,123121,0,05920, dann sollte nur diese Wahrscheinlichkeiten addiert werden (die Summe aller obigen Werte ergibt ungefähr 0,737 oder 73%) – deepesh

+1

' clf_svm' ist ein Klassifikationsschätzer. Es wird nicht das Wort Wahrscheinlichkeit ausgegeben, sondern nur Klasse. Ich verstehe nicht, was Sie unter Wahrscheinlichkeit verstehen. –

Antwort

1

Dies funktioniert wie erwartet, als das Modell, das Sie sind Training ist diskriminativen nicht generative. So sind die Wahrscheinlichkeiten Sie erhalten, sind

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

und für solche Wahrscheinlichkeitsverteilung (über endlichen Menge von möglichen Werten label1 zu labelK).

SUMi P(labeli | x) = 1 

Discriminative Modelle nicht Modell P (X), gibt es buchstäblich nichts darin, dass diese Menge darstellen kann. Warum? Denn das macht das Lernen viel einfacher, und wenn Sie nur auf Label/Wert achten, brauchen Sie nie P (X).

Was sind Sie nach sind das Gegenteil Mengen P (x | label1), seitdem

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

aber P(x|labeli) ist nirgends in den unterscheidenden Modelle entweder gefunden werden. Also, wenn Sie Zugriff auf P (X) benötigen, müssen Sie es explizit lernen, zum Beispiel mit GMMs, Naive Bayes, etc., aber nicht logistische Regression, die Sie jetzt verwenden (was ein diskriminierendes Modell ist).

Verwandte Themen