1

Я использую два разных алгоритма классификации в моей логистической регрессии данных и наивных байках, но это дает мне такую ​​же точность, даже если я изменю коэффициент подготовки и тестирования данных. Ниже приведен код, который я используюКак проверить классификацию чеков, используя sklearn

import pandas as pd 
from sklearn.cross_validation import train_test_split 
from sklearn.preprocessing import StandardScaler 
from sklearn.metrics import accuracy_score 
from sklearn.linear_model import LogisticRegression 
from sklearn.naive_bayes import GaussianNB 


df = pd.read_csv('Speed Dating.csv', encoding = 'latin-1') 

X = pd.DataFrame() 
X['d_age'] = df ['d_age'] 
X['match'] = df ['match'] 
X['importance_same_religion'] = df ['importance_same_religion'] 
X['importance_same_race'] = df ['importance_same_race'] 
X['diff_partner_rating'] = df ['diff_partner_rating'] 

# Drop NAs 
X = X.dropna(axis=0) 
# Categorical variable Match [Yes, No] 
y = X['match'] 
# Drop y from X 
X = X.drop(['match'], axis=1) 

# Transformation 
scalar = StandardScaler() 
X = scalar.fit_transform(X) 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 

# Logistic Regression 
model = LogisticRegression(penalty='l2', C=1) 
model.fit(X_train, y_train) 
print('Accuracy Score with Logistic Regression: ', accuracy_score(y_test, model.predict(X_test))) 

#Naive Bayes 
model_2 = GaussianNB() 
model_2.fit(X_train, y_train) 
print('Accuracy Score with Naive Bayes: ', accuracy_score(y_test, model_2.predict(X_test))) 
print(model_2.predict(X_test)) 

Возможно ли, чтобы каждый раз точность была такой же?

+1

Это из-за вашего ввода, 'X' является' numpy array' и target, 'y' a' pandas series' при вызове 'train_test_split' несоответствия в типах, не влияющих на точность модели? Вы можете использовать 'y' в качестве массива с использованием' y.values' и действительно проверить, если это проблема. –

+0

Это была одна из проблем, но я решил ее преобразовать все в dataframe, но все же я получаю аналогичную точность. Фактически я обнаружил, что точность, например, составляет 80%, потому что 80% тестовых данных содержат нули, поэтому на самом деле модель вообще не работает. – muazfaiz

ответ

1

Это распространенные явления, возникающие, если частоты классов несимметричны, например. почти все образцы принадлежат одному классу. Например, если 80% ваших образцов принадлежат классу «Нет», то классификатор часто будет склонен прогнозировать «Нет», потому что такое тривиальное предсказание достигает максимальной общей точности в вашем наборе поездов.

В целом при оценке производительности бинарного классификатора вы должны не только смотреть на общую точность. Вы должны учитывать другие показатели, такие как кривая ROC, точность классов, оценки f1 и т. Д.

В вашем случае вы можете использовать sklearns classification report, чтобы получить лучшее чувство, что ваш классификатор фактически обучения:

from sklearn.metrics import classification_report 

print(classification_report(y_test, model_1.predict(X_test))) 
print(classification_report(y_test, model_2.predict(X_test))) 

Он будет печатать точность, вспомнить и точность для каждого класса.

Есть три варианта о том, как достичь большей точности классификации на классе «Да»

  • использование весов выборки, то можно увеличить значение образцов класса «Да», таким образом, заставляя классификатор предсказать «Да» чаще
  • декодируют «нет» класса в оригинальном X для достижения более сбалансированных частоты класса
  • повышающей дискретизации «Да» класс в оригинальном X, чтобы достичь более сбалансированных частот класса
Смежные вопросы