AttributeError: объект LinearRegression не имеет атрибута 'coef_'

Я пытался подогнать эти данные с помощью линейной регрессии, следуя руководству по bigdataexaminer. До этого момента все работало нормально. Я импортировал LinearRegression из sklearn и отлично распечатал количество коэффициентов. Это был код до того, как я попытался получить коэффициенты из консоли.

import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
import sklearn
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression

boston = load_boston()
bos = pd.DataFrame(boston.data)
bos.columns = boston.feature_names
bos['PRICE'] = boston.target

X = bos.drop('PRICE', axis = 1)

lm = LinearRegression()

После того, как я все это настроил, я выполнил следующую команду, и она вернула правильный результат:

In [68]: print('Number of coefficients:', len(lm.coef_)

Number of coefficients: 13

Однако теперь, если я когда-либо попытаюсь снова напечатать эту же строку или использовать lm.coef_, он скажет мне, что coef_ не является атрибутом LinearRegression, сразу после того, как я ПРОСТО успешно использовал его, и я не трогал ни один из код, прежде чем я попробовал его снова.

In [70]: print('Number of coefficients:', len(lm.coef_))

Traceback (most recent call last):

 File "<ipython-input-70-5ad192630df3>", line 1, in <module>
print('Number of coefficients:', len(lm.coef_))

AttributeError: 'LinearRegression' object has no attribute 'coef_'

person Destroxia    schedule 28.07.2016    source источник
comment
Где вы называете метод подгонки? Используя только ту часть, которую вы поделили, len (lm.coef_) не может напечатать 13.   -  person ayhan    schedule 28.07.2016
comment
Я никогда не называл подходящий метод, но могу обещать вам, что в первый раз, когда я запустил эту строку print('Number of coefficients:', len(lm.coef_)), она определенно вернула 13. Я не уверен, что это проблема с питоном 3 или еще много чего, но он напечатал это в первый раз.   -  person Destroxia    schedule 28.07.2016
comment
@Destroxia Если не подошла функция, как там коэффициент ???   -  person user1157751    schedule 28.07.2016
comment
@Destroxia По сути, вы пытаетесь решить m в виде y = mx + c, а m - это ваш коэффициент.   -  person user1157751    schedule 28.07.2016
comment
Что между 68 и 70? Я думаю, что-то вроде runfile(...)?   -  person ayhan    schedule 28.07.2016
comment
Да, я просто перекомпилировал код.   -  person Destroxia    schedule 28.07.2016


Ответы (1)


Атрибут coef_ создается при вызове метода fit(). До этого он будет неопределенным:

>>> import numpy as np
>>> import pandas as pd
>>> from sklearn.datasets import load_boston
>>> from sklearn.linear_model import LinearRegression

>>> boston = load_boston()

>>> lm = LinearRegression()
>>> lm.coef_
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-22-975676802622> in <module>()
      7 
      8 lm = LinearRegression()
----> 9 lm.coef_

AttributeError: 'LinearRegression' object has no attribute 'coef_'

Если мы вызовем fit(), коэффициенты будут определены:

>>> lm.fit(boston.data, boston.target)
>>> lm.coef_
array([ -1.07170557e-01,   4.63952195e-02,   2.08602395e-02,
         2.68856140e+00,  -1.77957587e+01,   3.80475246e+00,
         7.51061703e-04,  -1.47575880e+00,   3.05655038e-01,
        -1.23293463e-02,  -9.53463555e-01,   9.39251272e-03,
        -5.25466633e-01])

Я предполагаю, что каким-то образом вы забыли позвонить fit(), когда запускали проблемную линию.

person jakevdp    schedule 28.07.2016
comment
Спасибо, похоже, проблема решена, хотя я не уверен, как это сработало в первый раз без подгонки. - person Destroxia; 28.07.2016