【发布时间】:2016-12-20 23:56:56
【问题描述】:
我在我的数据逻辑回归和朴素贝叶斯上运行两种不同的分类算法,但即使我改变了训练和测试数据的比率,它也给了我相同的准确性。以下是我正在使用的代码
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))
有没有可能每次精度都一样?
【问题讨论】:
-
是因为您的输入,
X是numpy array和目标,y是pandas series对象,同时调用train_test_split类型不匹配不会影响模型的准确性?您可以使用y.values将y转换为数组并检查是否确实存在问题。 -
这是一个问题,但我已经通过将所有内容转换为数据框来解决它,但我仍然获得了类似的准确性。事实上,我发现例如准确率为 80%,因为 80% 的测试数据包含零,所以实际上模型根本不起作用。
标签: python scikit-learn classification logistic-regression naivebayes