#python #matplotlib #scikit-learn
#python #matplotlib #scikit-учиться
Вопрос:
Я пытаюсь создать 3D-файл (собственные карты Лапласа) с идеями из https://github.com/zjxi/Manifold-Learning-Algorithms Сначала я определяю файл() следующим образом:
def le(data_in, dim_out, k=15):
data_len = len(data_in)
weight = np.zeros([data_len, data_len], np.float)
for i in range(data_len):
knn_dots, distance_list = knn(data_in, i, k)
# weight[i][knn_dots] = np.exp(-np.square(distance_list[knn_dots]) / (i 1.))
weight[i][knn_dots] = 1.0
mat_d = np.diag(np.sum(weight, axis=0))
mat_l = mat_d - weight
val, vec = np.linalg.eig(mat_l)
return np.reshape(vec[np.argsort(val)[:dim_out]], [data_len, dim_out])
Затем я использую файл, чтобы рассеять результат:
def le_plot_3d(data, target):
Z_LE = Le.le(data, 3)
ax = Axes3D(plt.figure())
ax.scatter(Z_LE[:, 0], Z_LE[:, 1], Z_LE[:, 2], c=target, s=60)
plt.title('LE')
plt.show()
Затем в основном методе я вызываю le_plot_3d(данные, цель) следующим образом :
import numpy
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import metrics
from sklearn import datasets
import LaplacianEigenmap as Le
import LLE
import numpy as np
def knn(data_in, central_idx, k):
central_dot, data_len = data_in[central_idx], len(data_in)
distance_list = np.zeros([data_len], np.float)
for i in range(data_len):
distance_list[i] = np.linalg.norm(data_in[i] - central_dot)
return np.argsort(distance_list)[:k], distance_list
def le(data_in, dim_out, k=15):
data_len = len(data_in)
weight = np.zeros([data_len, data_len], np.float)
for i in range(data_len):
knn_dots, distance_list = knn(data_in, i, k)
# weight[i][knn_dots] = np.exp(-np.square(distance_list[knn_dots]) / (i 1.))
weight[i][knn_dots] = 1.0
mat_d = np.diag(np.sum(weight, axis=0))
mat_l = mat_d - weight
val, vec = np.linalg.eig(mat_l)
return np.reshape(vec[np.argsort(val)[:dim_out]], [data_len, dim_out])
def le_plot_3d(data, target):
Z_LE = Le.le(data, 3)
ax = Axes3D(plt.figure())
ax.scatter(Z_LE[:, 0], Z_LE[:, 1], Z_LE[:, 2], c=target, s=60)
plt.title('LE')
plt.show()
def main():
data, target = datasets.samples_generator.make_s_curve(1000, random_state=9)
le_plot_3d(data, target)
if __name__ == '__main__':
main()
Это желаемый результат: хочу разбросать точки, которые я сгенерировал с помощью datasets.samples_generator.make_s_curve, и использовать собственную карту Лапласа для встраивания точек.
Однако я получаю: ValueError: Invalid RGBA argument: masked_array(data=[0.269944 0.j, 0.014625 0.j, 0.341379 0.j, 0.47667557 0.j], mask=False, fill_value=(1e 20 0j))
в matplotlibcolors.py …Теперь я не могу отладить недопустимый аргумент RGBA, потому что я не понимаю, что вызывает ошибку.Мой список env выглядит следующим образом:
- numpy==1.16.3
- scikit-learn==0.21.2
- Matplotlib==3.1.0
- python==3.6
Комментарии:
1. что такое цель? можете ли вы привести пример того, как ваша функция выходит из строя?
2. функция только в main()