#python #scikit-learn #data-science #gaussian #mixture-model
#python #scikit-learn #наука о данных #гауссовский #модель смеси
Вопрос:
Я действительно новичок в python и GMM. Недавно я изучил GMM и пытаюсь реализовать коды из здесь
Я столкнулся с некоторыми проблемами при запуске метода gmm.sample():
gmm16 = GaussianMixture(n_components=16, covariance_type='full', random_state=0)
Xnew = gmm16.sample(400,random_state=42)
plt.scatter(Xnew[:, 0], Xnew[:, 1])
ошибка показывает:
TypeError: sample() got an unexpected keyword argument 'random_state'
Я проверил последний документ и выяснил, что метод sample должен содержать только n, что указывает на количество выборок для генерации. Но когда я удаляю ‘random_state = 42’, появляется новая ошибка:
коды:
Xnew = gmm16.sample(400)
plt.scatter(Xnew[:, 0], Xnew[:, 1])
ошибка:
TypeError: tuple indices must be integers or slices, not tuple
Кто-нибудь сталкивался с этой проблемой при реализации кодов от Джейка Вандерпласа? Как я мог это исправить?
Мой Jupyter:
Версия сервера notebook: 5.7.4
Python 3.7.1 (по умолчанию, 14 декабря 2018, 13:28:58)
Введите «авторское право», «кредиты» или «лицензия» для получения дополнительной информации
IPython 7.2.0 — улучшенный интерактивный Python. Введите ‘?’ для получения справки.
Ответ №1:
Вы получаете, TypeError
потому что sample
метод возвращает tuple
, смотрите здесь.
Это должно выполнить свою работу:
Xnew, Ynew = gmm16.sample(400) # if Ynew is valuable
plt.scatter(Xnew[:, 0], Xnew[:, 1])
или
Xnew, _ = gmm16.sample(400) # if Ynew isn't valuable
plt.scatter(Xnew[:, 0], Xnew[:, 1])
Ответ №2:
Ваша проблема заключается в том, как вы загружаете данные на точечный график. В частности, у вас есть массив numpy внутри кортежа, и способ индексации неверен. Попробуйте это.
plt.scatter(Xnew[0][:,0], Xnew[0][:,1])
По сути, мы имеем то, что первая индексация Xnew[0]
будет указывать на элемент в нужном вам кортеже (массив numpy), а вторая будет нарезать его так, как вам нужно. [:,1]
Здесь мы берем все строки и второй столбец.