Многомерная логистическая регрессия в Python показывает ошибку - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь сделать прогноз с помощью логистической регрессии и проверить точность с помощью библиотеки 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 Ответ

0 голосов
/ 01 марта 2019

Хотя вы не предоставляете подробности о ваших данных, судя по ошибке и комментариям в последней строке вашего кода:

#true value affter 3 days: 16.28 MPa

Я пришел к выводу, что вы находитесь в регрессии (т.е. числовой прогноз).Линейная регрессия является подходящей моделью для этой задачи, но логистическая регрессия равна , а не : логистическая регрессия предназначена для классификации проблем, и, таким образом, она ожидает двоичные (или категориальные) данные в качестве целевых переменных., а не непрерывные значения, следовательно, ошибка.

Короче говоря, вы пытаетесь применить модель, которая не подходит для вашей проблемы.

ОБНОВЛЕНИЕ (после ссылки на данные): Действительно, чтениевнимательно познакомившись с набором данных, вы увидите (выделение добавлено):

Прочность бетона на сжатие - это регрессия проблема

в то время как от scikit-Изучите Руководство пользователя для логистической регрессии (опять-таки, акцент добавлен):

Логистическая регрессия, несмотря на свое название, является линейной моделью для классификации , а не регрессии.

...