Керас дает меньшую точность, чем любой классификатор - PullRequest
0 голосов
/ 06 декабря 2018

Я использую Python для многоклассовой классификации текста, мой набор данных содержит 25000 арабских твитов, разделенных на 10 классов [спорт, политика, ....] Когда я использую

training = pd.read_csv('E:\cluster data\One_File_nonnormalizenew2norm.txt', sep="*")
training.dropna(inplace=True)
training.columns = ["text", "class1"]
training['class1'] = training.class1.astype('category').cat.codes
training.dropna(inplace=True)
# create our training data from the tweets
text = training['text']

y = (training['class1'])

from sklearn.model_selection import train_test_split
sentences_train, sentences_test, y_train, y_test = train_test_split(text, y, test_size=0.25, random_state=1000)
from sklearn.feature_extraction.text import CountVectorizer



vectorizer = CountVectorizer()
vectorizer.fit(sentences_train)

X_train = vectorizer.transform(sentences_train)
X_test  = vectorizer.transform(sentences_test)
X_train
from sklearn.linear_model import LogisticRegression

classifier = LogisticRegression()
classifier.fit(X_train, y_train)
score = classifier.score(X_test, y_test)

print("Accuracy:", score)

Точность: 0.9525099601593625

Когда я использую кераты:

model = Sequential()
max_words=5000
model.add(Dense(512, input_shape=(input_dim,), activation='softmax'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='softmax'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='softmax'))
model.add(Dense(10))

model.summary()

model.compile(loss='sparse_categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy'])
model.fit(X_train, y_train,  batch_size=150,  epochs=5,  verbose=1, validation_split=0.3,shuffle=True)


predicted = model.predict(X_test)
predicted = np.argmax(predicted, axis=1)
accuracy_score(y_test, predicted)

0.28127490039840636

где ошибка ???

обновление Я изменяю код на:

model = Sequential()
max_words=5000
model.add(Dense(512, input_shape=(input_dim,)))
model.add(Dropout(0.5))
model.add(Dense(256))
model.add(Dropout(0.5))
#model.add(Dense(1,activation='sigmoid'))####
model.add(Dense(10))

model.summary()
model.compile(loss='sparse_categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy'])


model.fit(X_train, y_train,batch_size=150,epochs=10,verbose=1,validation_split=0.3,shuffle=True)
predicted = model.predict(X_test)
predicted = np.argmax(predicted, axis=1)
accuracy_score(y_test, predicted)

0.7201593625498008 все еще плохая точность !!!

1 Ответ

0 голосов
/ 06 декабря 2018

Некоторые идеи.

  1. Удалите все активации Softmax (как сказал @Matias).
  2. Удалите model.add(Dense(1,activation='softmax')), это, вероятно, разрушает ваши результаты.
  3. Выполните более 5 эпох.
  4. Вы не используете одни и те же твиты для проверки в двух подходах.

Вероятно, вы должны предоставить точность как для обучающих, так и для тестовых наборов данныхбудь уверен, что происходит.

...