y = model.predict(X) plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet") fname = os.path.join("..", "figs", "kmeans_basic.png") plt.savefig(fname) print("\nFigure saved as '%s'" % fname) elif question == '5.1': X = load_dataset('clusterData.pkl')['X'] model = Kmeans(k=4) min_error = -1 y = [] # size = X.shape[0] for i in range(50): model.fit(X) cur_error = model.error(X) y.append(cur_error) if min_error == -1: min_error = cur_error pred = model.predict(X) elif cur_error < min_error: min_error = cur_error pred = model.predict(X) plt.scatter(X[:, 0], X[:, 1], c=pred, cmap="jet") plt.show() plt.plot(np.arange(1, 51), y) plt.xlabel(r'iterations') plt.ylabel(r'error') plt.show() elif question == '5.2':
elif question == '5': X = load_dataset('clusterData.pkl')['X'] model = Kmeans(k=4) model.fit(X) y = model.predict(X) plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet") fname = os.path.join("..", "figs", "kmeans_basic.png") plt.savefig(fname) print("\nFigure saved as '%s'" % fname) elif question == '5.1': X = load_dataset('clusterData.pkl')['X'] model = Kmeans(k=4) low = model.error(X) for i in range(49): new_model = Kmeans(k=4) err = new_model.error(X) if err < low: model = new_model low = err utils.plot_2dclustering(X, model['predict'](model, X)) print("Displaying figure...") plt.title("K-Means on clusterData") plt.show() elif question == '5.2': X = load_dataset('clusterData.pkl')['X']
plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet") fname = os.path.join("..", "figs", "q5_1_best_model.png") plt.savefig(fname) print("\nFigure saved as '%s'" % fname) elif question == '5.2': X = load_dataset('clusterData.pkl')['X'] errors = np.zeros(10) k_s = np.array(range(1, 11)) for k in k_s: errors_k = np.zeros(50) for z in range(50): model = Kmeans(k=k) model.fit(X) errors_k[z] = model.error(X) errors[k - 1] = np.min(errors_k) # save figure plt.plot(k_s, errors) filename = "q5_2_min_errors.pdf" plt.xlabel("k") plt.ylabel("Minimum error") fname = os.path.join("..", "figs", filename) plt.savefig(fname) print("\nFigure saved as '%s'" % filename) elif question == '5.3': X = load_dataset('clusterData2.pkl')['X']
model = Kmeans(k=4) model.fit(X) y = model.predict(X) plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet") fname = os.path.join("..", "figs", "kmeans_basic.png") plt.savefig(fname) print("\nFigure saved as '%s'" % fname) min_error = 9999999 min_model = None for i in range(0, 50): model = Kmeans(4) model.fit(X) error = model.error(X) if error < min_error: min_model = model min_error = error print("Minimum error: " + str(min_error)) plt.scatter(X[:, 0], X[:, 1], c=min_model.predict(X)) fname = os.path.join("..", "figs", "kmeans_good.png") plt.savefig(fname) print("Figure saved as ", fname) elif question == '5.1': X = load_dataset('clusterData.pkl')['X'] elif question == '5.2': X = load_dataset('clusterData.pkl')['X']
model = Kmeans(k=4) model.fit(X) y = model.predict(X) plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet") fname = os.path.join("..", "figs", "kmeans_basic.png") plt.savefig(fname) print("\nFigure saved as '%s'" % fname) elif question == '5.1': X = load_dataset('clusterData.pkl')['X'] # for the first question: print the error of the final clustering model model = Kmeans(k=4) model.fit(X) dist_error_final = model.error(X) print(dist_error_final) # for the third question: print the figure with the lowest error model_best = None error_minimum = np.inf for i in range(50): model = Kmeans(4) model.fit(X) error_minimum = np.inf error = model.error(X) if error <= error_minimum: error_minimum = error model_best = model y = model_best.predict(X) plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet")
y = model.predict(X) plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet") fname = os.path.join("..", "figs", "kmeans_basic.png") plt.savefig(fname) print("\nFigure saved as '%s'" % fname) elif question == '5.1': X = load_dataset('clusterData.pkl')['X'] min_err = np.inf for i in range(50): model = Kmeans(k=4) model.fit(X) y = model.predict(X) err = model.error(X) if (err < min_err): min_err = err plt.scatter(X[:, 0], X[:, 1], c=y, cmap="jet") fname = os.path.join("..", "figs", "kmeans_basic.png") plt.savefig(fname) print("K-means minimum error: %.3f" % min_err) # used to output error during fitting # model = Kmeans(k=4) # model.fit(X) # y = model.predict(X) # err = model.error(X) # print("K-means error: %.3f" % err)