Формат словаря class_weight для классификации sklearn - PullRequest
0 голосов
/ 20 мая 2019

Попытка выполнить классификацию по большим ~ 2500 * ~ 4000 объектам и получить документ доверия, сопровождающий данные обучения.

Я пытаюсь использовать значения достоверности в качестве параметра class_weight классификатора, и у меня возникают проблемы с пониманием формата словаря, который требуется для class_weight. Я искал решения для ошибки из-за использования словаря в формате {0: 1, 1: 0,66, 2: 0,66, 3: 1 ...}, но недавно узнал, что параметр требует форму [{ 0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] [https://scikit -learn.org /stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier]

Полагаю, я не понимаю формат [{a: b, c: d} ...] Я полагаю, что d - вес, но я не уверен в остальной части структуры или как добраться туда из моего файла CSV.

Что у меня так далеко:


>>> with open('confidence.csv') as csvfile:
>>>    reader = csv.DictReader(csvfile, delimiter=",")
>>>    confidence_dict={int(row['ID'])-1:int(float(row['confidence'])) for row in reader} #float(row['confidence'])

>>> print(confidence_dict)
{0: 0.66, 1: 1, 2: 0.66, 3: 0.66, 4: 1, ...}

>>> print(X)
    v0    v1    v2    v3     ...
0   1.413 0.874 0.506 1.790
1   0.253 0.253 0.486 1.864 
2   1.863 0.174 0.018 1.789
3   0.253 0.213 0.486 1.834
...

>>> print(y)
0   0
1   0
2   1
3   1
...

>>> linearSVC = LinearSVC(random_state=0, tol=1e-6, class_weight=confidence_dict)
>>> linearSVC.fit(X, y)

Class label {} not present. возвращается при попытке использовать веса классов в текущей форме словаря. Этого не происходит, если не введен вес класса.

ValueError: Class label 2 not present.

В Интернете имеется ограниченная информация по этой теме, поэтому я подумал, что постараюсь сделать четкое сообщение и, надеюсь, понять, как это реализовать.

1 Ответ

0 голосов
/ 21 мая 2019

После некоторых дальнейших исследований и указаний Джимми в комментариях я узнал, что ошибся, полагая, что ввод должен быть в форме

dict({x1, x2, x3,...xn})

где х - достоверность этого прогноза.Class_weight должен быть словарём в форме

dict({0:y0, 1:z0}, {0:y1, 1:z2}, {0:y1, 1:z1},...)

где y - достоверность / вес результата 0 и z - достоверность / вес результата 1.

Вот почему происходит ValueError: Class label 2 not present..Его ищет следующий словарь

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