Объект 'PolynomialFeatures' не имеет атрибута 'предвидеть' - PullRequest
1 голос
/ 18 мая 2019

Я хочу применить перекрестную проверку в k-кратном выражении для следующих моделей регрессии:

  1. Линейная регрессия
  2. Полиномиальная регрессия
  3. Поддержка векторной регрессии
  4. Регрессия дерева решений
  5. Случайная лесная регрессия

Я могу применить перекрестную проверку в k-кратном выражении для всех, кроме полиномиальной регрессии, что дает мне эту ошибку PolynomialFeatures' object has no attribute 'predict.Как обойти эту проблему.Кроме того, я делаю работу правильно, на самом деле мой главный мотив - посмотреть, какая модель работает лучше, так есть ли лучший способ сделать эту работу?

# Compare Algorithms
import pandas
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.linear_model import LinearRegression

from sklearn.preprocessing import PolynomialFeatures
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor

# load dataset
names = ['YearsExperience', 'Salary']
dataframe = pandas.read_csv('Salary_Data.csv', names=names)
array = dataframe.values
X = array[1:,0]
Y = array[1:,1]

X = X.reshape(-1, 1)
Y = Y.reshape(-1, 1)

# prepare configuration for cross validation test harness
seed = 7

# prepare models
models = []
models.append(('LR', LinearRegression()))

models.append(('PR', PolynomialFeatures(degree = 4)))
models.append(('SVR', SVR(kernel = 'rbf')))
models.append(('DTR', DecisionTreeRegressor()))
models.append(('RFR', RandomForestRegressor(n_estimators = 10)))

# evaluate each model in turn
results = []
names = []
scoring = 'neg_mean_absolute_error'
for name, model in models:
    kfold = model_selection.KFold(n_splits=10, random_state=seed)
    cv_results = model_selection.cross_val_score(model, X, Y.ravel(), cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)

# boxplot algorithm comparison
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()

Ответы [ 2 ]

1 голос
/ 18 мая 2019

В sklearn вы получаете полиномиальную регрессию с помощью:

  1. генерации функций полинома и взаимодействия на исходном наборе данных с использованием sklearn.preprocessing.PolynomialFeatures
  2. , работающих в обычном режимеЛинейная регрессия наименьших квадратов на преобразованном наборе данных с использованием sklearn.linear_model.LinearRegression

Пример игрушки:

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

# Create linear regression object
poly = PolynomialFeatures(degree=3)

X_train = poly.fit_transform(X_train)
X_test = poly.fit_transform(X_test)

model = linear_model.LinearRegression()
model.fit(X_train, y_train)

print(model.score(X_train, y_train))
0 голосов
/ 19 мая 2019

Вот измененная часть кода, если кто-то хочет для справки:

# prepare models
models = []
models.append(('LR', LinearRegression()))

models.append(('PR', LinearRegression()))
models.append(('SVR', SVR(kernel = 'rbf')))
models.append(('DTR', DecisionTreeRegressor()))
models.append(('RFR', RandomForestRegressor(n_estimators = 10)))

# evaluate each model in turn
results = []
names = []
scoring = 'neg_mean_absolute_error'
for name, model in models:
    kfold = model_selection.KFold(n_splits=10, random_state=seed)
    if name == 'PR':
        poly_reg = PolynomialFeatures(degree = 4)
        X_poly = poly_reg.fit_transform(X)
        cv_results = model_selection.cross_val_score(model, X_poly, Y.ravel(), cv=kfold, scoring=scoring)
    else:
        cv_results = model_selection.cross_val_score(model, X, Y.ravel(), cv=kfold, scoring=scoring)

    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...