def test_stochastic_fit(self): """ Test method using a simple data sets (Iris) """ # Load the Iris data set iris = load_iris() X = iris.data[:, :2] y = (iris.target != 0) * 1 # Use 50% of the data for training, 50% for testing. X_train, X_test, Y_train, Y_test = train_test_split(X, y.reshape(np.shape(X)[0], 1), train_size=0.50) logreg = LogisticRegression(X_train, Y_train, X_test, Y_test) logreg.fit_stochastic(n_epochs=50, t0=5, t1=50) # Assert accuracy is more than 0.85 self.assertTrue(logreg.accuracy()>0.85)
plt.plot(training_accuracy, 'b', label="Training accuracy") plt.plot(validation_accuracy, 'r', label="Test accuracy") plt.xlabel('Epoch') plt.ylabel('Accuracy') plt.show() plt.plot(training_cross_entropy, 'b', label="Training cross entropy") plt.plot(validation_cross_entropy, 'r', label="Test cross entropy") plt.xlabel('Epoch') plt.ylabel('Cross entropy') plt.show() X_test = X[n_training + n_validation:] y_test = y[n_training + n_validation:] print(log_reg.regularized_cross_entropy(X_test, y_test), log_reg.accuracy(X_test, y_test)) confusion_map = log_reg.confusion_map(X_test, y_test) plt.imshow(confusion_map, cmap='Reds', interpolation='nearest') plt.show() training_accuracies = [] training_cross_entropies = [] test_accuracies = [] test_cross_entropies = [] kf = KFold(n_splits=4) for train_index, test_index in kf.split(X): log_reg = LogisticRegression(regularization_factor=.001) training_accuracy, training_cross_entropy = log_reg.train(X[train_index], y[train_index], epochs=1200) training_accuracies.append(log_reg.accuracy(X[train_index],
ilambda = 0 num_iters = 1000 # 创建模型 my_linear = LogisticRegression(X_m, y) print('\n梯度下降学习中(lambda = {})...'.format(ilambda)) my_linear.gradient_descent(alpha, ilambda, num_iters) theta = '' for val in my_linear.theta: theta += str(val)[str(val).find('[')+1:-1] theta += '\n' print('θ: \n{}'.format(theta)) print('梯度下降学习结束...') print('\n模型精度为: {:.2f}%'.format(my_linear.accuracy()*100)) print('\n梯度下降预测: ') # 预测数据 p = lrf.map_feature(data[0:5, 0:1], data[0:5, 1:2]) value = my_linear.prediction(p) for i in range(len(p)): print('{} -> 特征1: {:.2f} 特征2: {:.2f} --> 标记为1的概率: {:.2f} %'.format( i+1, p[i][1], p[i][2], float(value[i])*100)) # 绘制决策边界 my_linear.plot_decision_boundary(data)