Для симуляции я хотел бы случайным образом сгенерировать 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.
Код, который я использовал для построения:
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) Как я могу сделать так, чтобы смещения распределялись в большем диапазоне?
На самом деле, я хочу линейно разделить мои данные путем генерации случайно линейных «классификаторов» и выбрать лучшее с помощью разработанного алгоритма. Но когда мои данные «смещены» вокруг правого верхнего угла, все классификаторы с отрицательным наклоном оказываются бесполезными (см. Рисунок). Моя идея состояла бы в том, чтобы центрировать мои данные, что, возможно, должно быть лучшим решением, но я сначала ищу решение, которое позволило бы мне иметь большие перехваты