scikit -изучает модуль svm и функция прогнозирования не работает

#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 /…