Создание списка имен классов на основе списка индексов классов - PullRequest
0 голосов
/ 07 декабря 2018

Я играю с iris_dataset из sklearn.datasets Я хочу создать список, похожий на iris_dataset['target'], но вместо индекса указывать имя класса.То, как я это сделал:

from sklearn.datasets import load_iris
iris_dataset=load_iris()
y=iris_dataset.target
print("Iris target: \n {}".format(iris_dataset.target))
unique_y = np.unique(y)
class_seq=['']
class_seq=class_seq*y.shape[0]

for i in range(y.shape[0]):
    for (yy,tn) in zip(unique_y,iris_dataset.target_names):
        if y[i]==yy:
            class_seq[i]=tn          

print("Class sequence: \n {}".format(class_seq))

, но я бы хотел, чтобы это не проходило по всем элементам y, как это сделать лучше?

Результатчто мне нужен этот список для pandas.radviz сюжета, чтобы иметь правильную легенду:

pd.plotting.radviz(iris_DataFrame,'class_seq',color=['blue','red','green'])

И далее, чтобы иметь его для любого другого набора данных.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Йо может сделать это путем понимания списка.

class_seq = [ iris_dataset.target_names[i] for i in iris_dataset.target]

или используя карту

class_seq = list(map(lambda x : iris_dataset.target_names[x], iris_dataset.target))
0 голосов
/ 07 декабря 2018

Вы можете сделать это, зациклившись на iris_dataset.target_names.size.Это только размер 3, поэтому он должен быть намного быстрее для больших массивов y.

class_seq = np.empty(y.shape, dtype=iris_dataset.target_names.dtype)

for i in range(iris_dataset.target_names.size):
    mask = y == i
    class_seq[mask] = iris_dataset.target_names[i]

Если вы хотите иметь class_seq в виде списка: class_seq = list(class_seq)

...