Почему все мои регрессоры показывают гораздо более низкую точность, чем все мои классификаторы? - PullRequest
0 голосов
/ 12 марта 2020

Я тестирую пример кода ниже. Все результаты классификации довольно и вполне разумны (80% и более). Все результаты регрессии ужасны и весьма ненормальны (около 20%). С чего бы это? Я, должно быть, что-то делаю не так, но я не вижу, что здесь происходит.

import pandas as pd
import numpy as np

#reading the dataset
df=pd.read_csv("C:\\my_path\\train.csv")

#filling missing values
df['Gender'].fillna('Male', inplace=True)

df.fillna(0)
df.Loan_Status.replace(('Y', 'N'), (1, 0), inplace=True)

#split dataset into train and test

from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.3, random_state=0)

x_train=train.drop(['Loan_Status','Loan_ID'],axis=1)
y_train=train['Loan_Status']

x_test=test.drop(['Loan_Status','Loan_ID'],axis=1)
y_test=test['Loan_Status']

#create dummies
x_train=pd.get_dummies(x_train)
x_test=pd.get_dummies(x_test)


# Baggin Classifier
from sklearn.ensemble import BaggingClassifier
from sklearn import tree
model = BaggingClassifier(tree.DecisionTreeClassifier(random_state=1))
model.fit(x_train, y_train)
model.score(x_test,y_test)


# Bagging Regressor
from sklearn.ensemble import BaggingRegressor
model = BaggingRegressor(tree.DecisionTreeRegressor(random_state=1))
model.fit(x_train, y_train)
model.score(x_test,y_test)


# AdaBoostClassifier
from sklearn.ensemble import AdaBoostClassifier
model = AdaBoostClassifier(random_state=1)
model.fit(x_train, y_train)
model.score(x_test,y_test)


# AdaBoostRegressor
from sklearn.ensemble import AdaBoostRegressor
model = AdaBoostRegressor()
model.fit(x_train, y_train)
model.score(x_test,y_test)


# GradientBoostingClassifier
from sklearn.ensemble import GradientBoostingClassifier
model= GradientBoostingClassifier(learning_rate=0.01,random_state=1)
model.fit(x_train, y_train)
model.score(x_test,y_test)

# GradientBoostingRegressor
from sklearn.ensemble import GradientBoostingRegressor
model= GradientBoostingRegressor()
model.fit(x_train, y_train)
model.score(x_test,y_test)


# XGBClassifier
import xgboost as xgb
model=xgb.XGBClassifier(random_state=1,learning_rate=0.01)
model.fit(x_train, y_train)
model.score(x_test,y_test)


# XGBRegressor
import xgboost as xgb
model=xgb.XGBRegressor()
model.fit(x_train, y_train)
model.score(x_test,y_test)

Образцы данных приведены по ссылке ниже.

https://www.kaggle.com/wendykan/lending-club-loan-data

Наконец, вот небольшой пример того, что я вижу.

# Bagging Regressor
from sklearn.ensemble import BaggingRegressor
regressor = BaggingRegressor()
regressor.fit(x_train,y_train)
accuracy = regressor.score(x_test,y_test)
print(accuracy*100,'%')
# result:
13.022388059701505 %

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(x_train,y_train)
accuracy = regressor.score(x_test,y_test)
print(accuracy*100,'%')
# result:
29.836209522493196 %

1 Ответ

1 голос
/ 12 марта 2020

Регрессия и классификация - две разные задачи. Из вашего кода кажется, что вы пытаетесь установить регрессор теми же данными, что и классификатор. В основном регрессоры пытаются найти функцию, которая лучше всего определяет выходной номер на основе входных данных. Таким образом, целевые значения должны быть числами из непрерывного пространства, а не категориями. Например, вы можете прогнозировать доход заемщика на основе суммы денег, которую он занимает.

Проверьте эту среднюю страницу для получения дополнительной информации о разнице между регрессией и классификацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...