AttributeError: std не найден (нейронные сети) - PullRequest
0 голосов
/ 24 июня 2018

Я новичок в Python и в настоящее время делаю проект в нем.У меня есть аудио и лирические данные песен.Во время тренировки модели с аудио функциями масштабирование было сделано легко.но когда я использую для лирических, то есть текстовых данных, это дает эту ошибку.я преобразовал текстовые данные в числовые с помощью CountVectorizer.это мой код

lyr = pd.read_csv('ly.csv',encoding = "ISO-8859-1")
X = lyr.lyrics
y = lyr.terms
text_train, text_test, y_train, y_test = train_test_split(X, y)
vect = CountVectorizer().fit(text_train)
X_train = vect.transform(text_train)
X_test = vect.transform(text_test)
# compute the mean value per feature on the training set
mean_on_train = X_train.mean(axis=0)
# compute the standard deviation of each feature on the training set
std_on_train = X_train.std(axis=0)
# afterwards, mean=0 and std=1
X_train_scaled = (X_train - mean_on_train) / std_on_train
X_test_scaled = (X_test - mean_on_train) / std_on_train
mlp = MLPClassifier(random_state=0)
mlp.fit(X_train_scaled, y_train)
print("accuracy on training set: %f" % mlp.score(X_train_scaled, y_train))
print("accuracy on test set: %f" % mlp.score(X_test_scaled, y_test))

и это ошибка

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-d65d865b4b90> in <module>()
  3 mean_on_train = X_train.mean(axis=0)
  4 # compute the standard deviation of each feature on the training set
----> 5 std_on_train = X_train.std(axis=0)
  6 # afterwards, mean=0 and std=1
  7 X_train_scaled = (X_train - mean_on_train) / std_on_train

C:\ProgramData\Anaconda3\lib\site-packages\scipy\sparse\base.py in 
__getattr__(self, attr)
574             return self.getnnz()
575         else:
--> 576             raise AttributeError(attr + " not found")
577 
578     def transpose(self, axes=None, copy=False):

AttributeError: std not found    

С уважением

1 Ответ

0 голосов
/ 25 июня 2018

У вас две отдельные проблемы.

Сначала - это то, что вы пытаетесь вызвать метод для объекта, который не поддерживает этот метод.Если вы посмотрите на документы для scipy.sparse.csr.csr_matrix , вы увидите, что у него нет метода 'std'.(Это имеет в виду, максимум, и некоторые другие вещи).Я только что связался с текущей версией Scipy, я не уверен, какую версию вы используете.Почему это не встроено?Я не знаю.Это может быть не универсально применимое приложение к этому объекту, поэтому это не всегда безопасно.Или разработчики еще не добрались до этого, или убрали его и т. Д. Любое количество возможностей, но ваша подсказка была:

AttributeError: std not found

Секунда , основываясь на вашем комментарии вышеесли это нормально, просто взять X_train / mean;это зависит от того, что вы хотите.Если вы берете ряд чисел и делите их на среднее значение, вы в основном рассчитываете процент.Если вы хотите стандартизированные значения (что вы обычно делаете для машинного обучения), то вам действительно нужно стандартное отклонение .Я покажу вам пример использования numpy, которые являются простыми массивами.

>>> import numpy as np
>>> x = [2,3,3,4,4,4,4,5,5]
>>> np.std(x)
0.9162456945817024
>>> np.mean(x)
3.7777777777777777

Вычислить стандартное отклонение просто: я разбил его на квадратичные разности, дисперсию, а затем третье фактическое стандартное отклонение:

>>> ((x-np.mean(x))**2)
array([3.16049383, 0.60493827, 0.60493827, 0.04938272,
       0.04938272, 0.04938272, 1.49382716, 1.49382716])
>>> np.sum(((x-np.mean(x))**2))/len(x)
0.8395061728395062
>>> np.sqrt(np.sum(((x-np.mean(x))**2))/9)
0.9162456945817024

Итак,Вы можете использовать это, чтобы сгенерировать то, что вам было нужно:

>>> (x-np.mean(x))/0.916245  #could also use np.std(x)
>>> array([-1.94028647, -0.84887533, -0.84887533,  0.24253581,  0.24253581,
    0.24253581,  0.24253581,  1.33394695,  1.33394695])

Сравните это с сгенерированными вами значениями (2 - 57% от 3.77777 и т. д.), которые не совсем совпадают

>>> x/np.mean(x)
array([0.52941176, 0.79411765, 0.79411765, 1.05882353, 1.05882353,
       1.05882353, 1.05882353, 1.32352941, 1.32352941])
...