#python #machine-learning #scikit-learn #svm #k-means
#python #машинное обучение #scikit-learn #svm #k-означает
Вопрос:
Я пытаюсь заставить SVM работать с помощью scikit-learn, но не могу получить ожидаемые результаты. Я хотел бы использовать k-means для классификации примерно 2-5 кластеров данных, а затем использовать SVM для построения модели для этих данных, для которых я могу использовать новые данные для прогнозирования / классификации на лету. У меня это не сработало, поэтому я попытался вручную передать метки, 500 образцов с 3 классифицированными кластерами данных, в SVM. Я всегда получаю одно и то же прогнозируемое значение «1», независимо от того, какие случайные данные я пытаюсь предсказать SVM. Что происходит в tarnation….
# Attempting 3 clusters: 500 training samples in asarray (x-y coordinate data)
clf = svm.SVC(kernel = 'rbf', C=1, gamma = 1)
clf.fit(asarray,labels)
realData = [[-0.005, -0.01], [-0.005, -0.024], [-0.0075, -0.01], [-0.007, -0.008]]
print(clf.predict(realData))
# output: [1 1 1 1]
Пожалуйста, имейте это в виду… У меня всего пара недель опыта работы с python, и у меня все еще есть только общие знания по многим темам машинного обучения.
РЕДАКТИРОВАТЬ: примеры наборов данных для asarray amp; labels
asarray:
[[-0.001, -0.008]
[-0.0055, -0.0236]
[-0.007, -0.0221]
...
[-0.008, -0.01]
[-0.0062, -0.015]
[-0.0025, -0.009]]
метки:
[0 2 2 ... 1 1 0]
Я не хотел перечислять все 500 элементов данных, поэтому вместо этого я выписал очень похожий образец.
Комментарии:
1. не могли бы вы
asarray
также показать намlabels
и?2. Откуда
asarray
взялся? 6 примеровasarray
, которые вы добавили к вопросу, недостаточно, чтобы определить, являются ли группы разделимыми вообще, знаете ли вы, есть ли они? Не могли бы вы показать график данных в каждой группе и тестовые данные?3. Похоже, что точки в вашем наборе функций неразличимы, и SVM присваивает каждому метку 1. Вы экспериментировали с разными классификаторами? Кроме того, есть ли причина, по которой вы изменили параметр gamma по умолчанию на 1?
4. SVM чувствителен к масштабированию, особенно когда вы не оптимизируете параметры ядра с помощью перекрестной проверки. Попробуйте масштабировать данные до нулевого среднего и единичной дисперсии, используя
StandardScaler
, проверьте результаты с параметрами C и sigma по умолчанию. Другой проблемой может быть дисбаланс классов — сколько учебных баллов у вас есть для каждого класса? В качестве альтернативы вам также следует попробовать RandomForestClassifier, он такой же мощный, как SVM, но не требует такой большой оптимизации параметров.5. Не уверен, что вы когда-либо исправляли это, но у меня была похожая проблема в течение нескольких недель, и я только что получил действительно хорошую производительность прогнозирования от моего SVM, изменив значение gamma. Вы также можете попробовать значение C, если это необходимо. См. stats.stackexchange.com/questions/125353 /…