Каков наилучший способ генерирования случайных 2D линейных разделителей? - PullRequest
0 голосов
/ 12 января 2019

Для симуляции я хотел бы случайным образом сгенерировать 100 линейных классификаторов (то есть строк). Я делал это с:

classifier_array=list(np.random.uniform(-1,1,(n_classifiers,n_dim+1)))

Другими словами, я пытаюсь реализовать w_1*x_1+w_2*x_2+...+b=0, выбирая веса и смещения случайным образом между -1 и 1.

Но, похоже, что склоны кажутся хорошо распределенными, это не относится к перехватам (в измерении 2), которые всегда кажутся близкими к 0. enter image description here

Код, который я использовал для построения:

def abline(slope, intercept):
"""Plot a line from slope and intercept"""


    axes = plt.gca()
    x_vals = np.array(axes.get_xlim())
    y_vals = intercept + slope * x_vals
    plt.plot(x_vals, y_vals, '--')

def plot_data(classifiers): 


    axes = plt.gca()

    axes.set_xlim([-100,100]) 
    axes.set_ylim([-100,100])

    for i in range (0, len(classifiers)):

        slope=-classifiers[i][0]/classifiers[i][1]

        intercept=-classifiers[i][2]/classifiers[i][1]
        abline(slope, intercept)


    plt.show()

и поэтому я просто делаю

plot_data(classifier_array)

после генерации моих классификаторов

1) Почему смещения так близки к 0?

2) Как я могу сделать так, чтобы смещения распределялись в большем диапазоне?

На самом деле, я хочу линейно разделить мои данные путем генерации случайно линейных «классификаторов» и выбрать лучшее с помощью разработанного алгоритма. Но когда мои данные «смещены» вокруг правого верхнего угла, все классификаторы с отрицательным наклоном оказываются бесполезными (см. Рисунок). Моя идея состояла бы в том, чтобы центрировать мои данные, что, возможно, должно быть лучшим решением, но я сначала ищу решение, которое позволило бы мне иметь большие перехваты

...