【问题标题】:How to do logistic regression on training and test data?如何对训练和测试数据进行逻辑回归?
【发布时间】:2020-06-21 04:27:37
【问题描述】:

我运行了这段代码,但 lr.fit 行似乎有错误。有谁知道怎么做?

from sklearn.model_selection import cross_val_predict
from sklearn.model_selection import cross_val_score
from sklearn import linear_model
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('2019.csv')
df1 = pd.DataFrame(df,columns=['GDP per capita', 'Social support'])

lr = LogisticRegression()
columns = ['GDP per capita', 'Social support']

X = df[columns]
y = df["Score"]
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.20,random_state=0)

lr.fit(X_train,y_train)
predictions = lr.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(accuracy)


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-afa10dbaa367> in <module>
     19 X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.30,random_state=0)
     20 
---> 21 lr.fit(X_train,y_train)
     22 predictions = lr.predict(X_test)
     23 accuracy = accuracy_score(y_test, predictions)

~/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/_logistic.py in fit(self, X, y, sample_weight)
   1526         X, y = check_X_y(X, y, accept_sparse='csr', dtype=_dtype, order="C",
   1527                          accept_large_sparse=solver != 'liblinear')
-> 1528         check_classification_targets(y)
   1529         self.classes_ = np.unique(y)
   1530         n_samples, n_features = X.shape

~/opt/anaconda3/lib/python3.7/site-packages/sklearn/utils/multiclass.py in check_classification_targets(y)
    167     if y_type not in ['binary', 'multiclass', 'multiclass-multioutput',
    168                       'multilabel-indicator', 'multilabel-sequences']:
--> 169         raise ValueError("Unknown label type: %r" % y_type)
    170 
    171 

ValueError: Unknown label type: 'continuous'

最上面是完整的调试错误,我只有在 X 和 y 旁边执行 .astype(int) 时才让它工作。否则如果我不这样做,就会出现你看到的错误。

【问题讨论】:

  • 回溯在哪里?
  • 它说我不能使用连续变量,但我的大多数列值都是连续的。所以我有点卡住了
  • 你能分享完整的回溯吗?
  • 彻底找出错误所在。追溯或数据本身在哪里?
  • 大家好,我在编辑中包含了错误,抱歉@UchihaAJ

标签: python pandas numpy matplotlib logistic-regression


【解决方案1】:

我去 Kaggle 搜索,发现 2019.csv 有两列。这些数据与世界各国人民的幸福感有关,以及人均GDP与“幸福指数”的关系。很好,对我有用。

无论如何,我编辑了 2019.csv 并保留了两个数据列和分数。我有第 1 列 = 分数,它必须全为零或一(这非常重要)。我为其他两列重命名了 GDP 和 SS,并删除了所有其他列。

Score,GDP,SS - 2019.csv 中的列

这段代码之前在我的 Macbook Pro 上运行 PyCharm 时产生了以下输出:

数字是“准确度”

0.46875

进程以退出代码 0 结束

所以,一开始并没有那么好(几乎 47% 的准确率),可以很容易地大大改进......

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd

df = pd.read_csv('2019.csv')
df.head()

x = df.drop('Score', axis=1)
y = df.Score

lr = LogisticRegression()
columns = ['GDP', 'SS']

X = df[columns]
y = df["Score"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=0)

lr.fit(X_train, y_train)
predictions = lr.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(accuracy)

""" 这是输出

0.46875

进程以退出代码 0 结束 """

希望这会有所帮助。

【讨论】:

  • 嘿,我实际上设法解决了我的问题,结果我必须将我的分数转换为 1 和 0,但似乎我们的准确度值不同。我的准确度值为 0.89
  • 如果您觉得我有帮助,请接受答案 - 这对我非常有帮助,谢谢您父亲节快乐
猜你喜欢
  • 2020-02-25
  • 2021-06-22
  • 2015-04-10
  • 1970-01-01
  • 2016-01-31
  • 2015-01-07
  • 1970-01-01
  • 2019-10-22
  • 2016-02-01
相关资源
最近更新 更多