【问题标题】:logistic regression does not show the correct results逻辑回归没有显示正确的结果
【发布时间】:2018-09-09 00:03:22
【问题描述】:

我正在使用以下数据集,原始版本,来自:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/

我想应用逻辑回归对该数据集上的样本进行分类,我的代码如下:

import numpy as np
from sklearn.model_selection import train_test_split
data = np.genfromtxt("breast-cancer-wisconsin.data",delimiter=",")
X = data[:,1:-1]
X[X == '?'] = '-999999'
X = X.astype(int)
y = data[:, -1].astype(int)
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2)
lg=linear_model.LogisticRegression(n_jobs = 10)
lg.fit(X_train,y_train)
predictions = lg.predict(X_test)
cm=confusion_matrix(y_test,predictions)
print(cm)
score = lg.score(X_test, y_test)

print("Accuracy: %0.2f (+/- %0.2f)" % (score.mean(), score.std() * 2))

我删除了第一列,因为它只是 ID,并替换了 ?具有大数字的字符,因此可以将其归类为异常值。我遇到的问题是当我将我的结果与此页面中获得的结果进行比较时:

https://anujdutt9.github.io/ML_LogRSklearn.html

因为我得到的准确度是:

Accuracy: 0.34

在前面提到的链接上,准确率约为 95%。

我的混淆矩阵的结果也很差,比如我得到:

[[ 1 92]
 [ 0 47]]

我的模型有什么问题?

谢谢

【问题讨论】:

  • linear_model.LogisticRegression 是否对异常值进行处理?我会尝试为? 估算列的平均值。
  • 谢谢@Blorgbeard,但我输入了网页上的示例,它工作正常,我的代码有问题
  • 好的,那么您的代码与示例有何不同?
  • 我的代码给出了一个糟糕的混淆矩阵,你可以看到第一类的比较很差,而网页中的代码给出了很好的结果。我尝试将数组转换为浮点数,检查数组的大小等等,但没有任何效果。

标签: python scikit-learn


【解决方案1】:

试试这个

X[X == '?'] = np.nan #converting ? to NaN

然后插补平均值

imputer = Imputer()
transformed_X = imputer.fit_transform(X)

【讨论】:

  • 谢谢现在它可以工作了,请你给我一个更详细的答案,理论上,你在用 Imputer() 函数做什么?我想知道为什么在 Panda 中用 9999 替换效果很好。
  • imputer 函数转换缺失值。 Imputer 函数将“NaN”列作为默认缺失值。然后 Imputer 函数用该列的平均值替换缺失值。
猜你喜欢
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2018-04-25
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多