Python中的多元逻辑回归显示错误

Posted

技术标签:

【中文标题】Python中的多元逻辑回归显示错误【英文标题】:Multivariate logistic regression in Python shows error 【发布时间】:2019-07-23 12:14:31 【问题描述】:

我正在尝试使用逻辑回归进行预测,并使用 Python 和 sklearn 库测试准确性。我使用的是从这里下载的数据:

http://archive.ics.uci.edu/ml/datasets/concrete+compressive+strength

它的excel文件。我写了一段代码,但总是报同样的错误,报错是:

ValueError: Unknown label type: 'continuous'

我在做线性回归时使用了相同的逻辑,它适用于线性回归。

这是代码:

import numpy as np
import pandas as pd
import xlrd
from sklearn import linear_model
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

#Reading data from excel

data = pd.read_excel("DataSet.xls").round(2)
data_size = data.shape[0]
#print("Number of data:",data_size,"\n",data.head())

my_data = data[(data["Superpl"] == 0) & (data["FlyAsh"] == 0) & (data["BlastFurSlag"] == 0)].drop(columns=["Superpl","FlyAsh","BlastFurSlag"])
my_data = my_data[my_data["Days"]<=28]
my_data_size = my_data.shape[0]
#print("Size of dataset for 28 days or less:", my_data_size, "\n", my_data.head())


def logistic_regression(data_input, cement, water,
                          coarse_aggr, fine_aggr, days):

    variable_list = []
    result_list = []

    for column in data_input:

        variable_list.append(column)
        result_list.append(column)

    variable_list = variable_list[:-1]
    result_list = result_list[-1]

    variables = data_input[variable_list]
    results = data_input[result_list]

    #accuracy of prediction (splittig dataframe in train and test)
    var_train, var_test, res_train, res_test = train_test_split(variables, results, test_size = 0.3, random_state = 42)

    #making logistic model and fitting the data into logistic model
    log_regression = linear_model.LogisticRegression()
    model = log_regression.fit(var_train, res_train)

    input_values = [cement, water, coarse_aggr, fine_aggr, days]

    #predicting the outcome based on the input_values
    predicted_strength = log_regression.predict([input_values]) #adding values for prediction
    predicted_strength = round(predicted_strength[0], 2)

    #calculating accuracy score
    score = log_regression.score(var_test, res_test)
    score = round(score*100, 2)

    prediction_info = "\nPrediction of future strenght: " + str(predicted_strength) + " MPa\n"
    accuracy_info = "Accuracy of prediction: " + str(score) + "%\n"
    full_info = prediction_info + accuracy_info

    return full_info

print(logistic_regression(my_data, 376.0, 214.6, 1003.5, 762.4, 3)) #true value affter 3 days: 16.28 MPa

【问题讨论】:

【参考方案1】:

虽然您没有提供数据的详细信息,但从错误和代码最后一行的注释来看:

#true value affter 3 days: 16.28 MPa

我得出结论,您处于回归(即数字预测)设置中。线性回归是适合此任务的模型,但逻辑回归不是:逻辑回归用于分类问题,因此它期望二进制(或分类)数据为目标变量,而不是连续值,因此会出现错误。

简而言之,您正在尝试应用不适合您的问题的模型。

更新(在链接到数据之后):确实,仔细阅读数据集描述,您会看到(强调添加):

混凝土抗压强度是回归问题

来自 scikit-learn User's Guide 的逻辑回归(再次强调):

逻辑回归,尽管它的名字,是分类的线性模型,而不是回归。

【讨论】:

非常感谢,这是我的愚蠢错误。是否可以进行多元非线性回归(对数)? @Aleksandar 不确定您的意思 - 如果您打算将响应转换为对数,原则上是的... 我的意思是这样的:***.com/questions/54949969/…

以上是关于Python中的多元逻辑回归显示错误的主要内容,如果未能解决你的问题,请参考以下文章

利用TensorFlow实现多元逻辑回归

在 R 中绘制多元逻辑回归模型的结果

求python支持向量机多元回归预测代码

R语言回归分析(regression)常见算法:简单线性回归多项式回归多元线性回归多水平回归多输出回归逻辑回归泊松回归cox比例风险回归时间序列分析非线性回归非参数回归稳健回归等

R语言回归分析(regression)常见算法:简单线性回归多项式回归多元线性回归多水平回归多输出回归逻辑回归泊松回归cox比例风险回归时间序列分析非线性回归非参数回归稳健回归等

多元回归分析类型