Как запустить numy log в классе - PullRequest
0 голосов
/ 13 февраля 2019

Я действительно новичок в написании классов Python.По сути, я пытаюсь написать класс, который будет использоваться в конвейере sklearn.Класс должен добавить два атрибута в существующий фрейм данных, изменив некоторые существующие атрибуты.

  1. Новые атрибуты будут преобразованием журнала существующего столбца, а
  2. - произведением двух других атрибутов, умноженных вместе.Вот что у меня есть:

код:

import BaseEstimator and TransformerMixIn
from sklearn.base import BaseEstimator, TransformerMixin

population_ix, A_PM10_ix, A_PM25_ix = 15, 2, 3

class CombinedAttributes(BaseEstimator, TransformerMixin):
    def __init__(self):
        pass
    def fit(self, X, y=None):
        return self
    def transform(self, X, y=None):
        log_pop = np.log(X[:,population_ix])
        pm = X[:, A_PM10_ix] * X[:,A_PM25_ix]
        return np.c_[X, log_pop, pm]

attr_adder = CombinedAttributes()
env_extra_attribs = attr_adder.transform(environment.values)

Это сообщение об ошибке, которое я получаю:

AttributeError                            Traceback (most recent call last)
<ipython-input-66-e138b3c2e517> in <module>()
      1 attr_adder = CombinedAttributes()
----> 2 env_extra_attribs = attr_adder.transform(environment.values)

<ipython-input-65-e4aac1c1930b> in transform(self, X, y)
     11         return self
     12     def transform(self, X, y=None):
---> 13         log_pop = np.log(X[:,population_ix])
     14         pm = X[:, A_PM10_ix] * X[:,A_PM25_ix]
     15         return np.c_[X, log_pop, pm]

AttributeError: 'float' object has no attribute 'log'</code>

Мой вопрос, как мне получитьпреобразование журнала для работы в этом.

Кроме того, я также не уверен на 100% в том, как я включил инструкцию pass в определение <strong>init</strong>.Опять же, это совершенно новое, и у меня возникают проблемы с поиском уроков, которые я могу понять.

Буду признателен за любую помощь, спасибо,

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Похоже, вы "переписали" импортированный модуль numpy со значением float.Найдите в своем коде что-то вроде:

np = 5.4

или любой другой тип np =.Также убедитесь, что вы правильно импортировали numpy с помощью import numpy as np и что НЕ включал помеченный импорт из неизвестных / самостоятельно написанных модулей с чем-то вроде from module_name import *.Это может «перезаписать» ваш импровизированный модуль импорта, если в этом модуле содержится какая-либо переменная с именем np.

Как правило, следует избегать импорта модулей с from module_name import *.Это почти всегда вызывает проблемы.

0 голосов
/ 13 февраля 2019

Я подозреваю, что environment.values или X внутри функции является массивом типа dtype.

In [195]: x = np.array([1.2, 2.3], object)
In [196]: np.sqrt(x)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-196-0b43c7e80401> in <module>()
----> 1 np.sqrt(x)

AttributeError: 'float' object has no attribute 'sqrt'
In [197]: (x+x)/2
Out[197]: array([1.2, 2.3], dtype=object)
In [198]: np.log(x)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-198-de666c833898> in <module>()
----> 1 np.log(x)

AttributeError: 'float' object has no attribute 'log'

Я подробно остановился на этом в другом недавнем ответе, AttributeError: объект 'Series'не имеет атрибута "sqrt"

0 голосов
/ 13 февраля 2019

Сообщение об ошибке в основном говорит о том, что вы пытаетесь вызвать метод .log() - это объект, который является float.Поскольку вы делаете это только для объекта np, я считаю, что вы случайно перезаписали свой импортированный модуль np где-нибудь.Вы не предоставили весь свой код, особенно MCVE, поэтому я могу только догадываться, что у вас может быть присвоение np перед выполненным кодом.

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

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