def main(): iris = datasets.load_iris() irisData = iris.data[:, [2, 3]] irisClass = iris.target dataTrainingSet, dataTestSet, classTrainingSet, classTestSet = train_test_split( irisData, irisClass, test_size=0.3, random_state=1, stratify=irisClass) # =============== Perceptron ==================== # Perceptron 1 classTrainingSubset1 = np.copy(classTrainingSet) classTrainingSubset1 = classTrainingSubset1[(classTrainingSubset1 != 2)] dataTrainingSubset1 = np.copy(dataTrainingSet) dataTrainingSubset1 = dataTrainingSubset1[(classTrainingSet != 2)] classTrainingSubset1[(classTrainingSubset1 != 0)] = -1 classTrainingSubset1[(classTrainingSubset1 != -1)] = 1 perceptron1 = Perceptron(learningRate=0.1, iterationsToStop=10) perceptron1.learn(dataTrainingSubset1, classTrainingSubset1) # Perceptron 2 classTrainingSubset2 = np.copy(classTrainingSet) classTrainingSubset2 = classTrainingSubset2[(classTrainingSubset2 != 1)] dataTrainingSubset2 = np.copy(dataTrainingSet) dataTrainingSubset2 = dataTrainingSubset2[(classTrainingSet != 1)] classTrainingSubset2[(classTrainingSubset2 != 2)] = -1 classTrainingSubset2[(classTrainingSubset2 != -1)] = 1 perceptron2 = Perceptron(learningRate=0.1, iterationsToStop=10) perceptron2.learn(dataTrainingSubset2, classTrainingSubset2) # Perceptron 3 classTrainingSubset3 = np.copy(classTrainingSet) classTrainingSubset3 = classTrainingSubset3[(classTrainingSubset3 != 0)] dataTrainingSubset3 = np.copy(dataTrainingSet) dataTrainingSubset3 = dataTrainingSubset3[(classTrainingSet != 0)] classTrainingSubset3[(classTrainingSubset3 != 1)] = -1 perceptron3 = Perceptron(learningRate=0.35, iterationsToStop=850) perceptron3.learn(dataTrainingSubset3, classTrainingSubset3) multiPerceptron = MultiPerceptron(perceptron1, perceptron2, perceptron3) plot_decision_regions(X=dataTestSet, y=classTestSet, classifier=multiPerceptron) plt.xlabel(r'$x_1$') plt.ylabel(r'$x_2$') plt.title('Perceptron') plt.legend(loc='upper left') plt.show() # =============== Logistic regression ==================== classTrainingSubset1[(classTrainingSubset1 != 1)] = 0 logisticRegression1 = LogisticRegression(learningRate=0.05, iterationsToStop=1000, random_state=1) logisticRegression1.learn(dataTrainingSubset1, classTrainingSubset1) logisticRegression1.printProbability(dataTrainingSubset1) classTrainingSubset2[(classTrainingSubset2 != 1)] = 0 logisticRegression2 = LogisticRegression(learningRate=0.05, iterationsToStop=1000, random_state=1) logisticRegression2.learn(dataTrainingSubset2, classTrainingSubset2) logisticRegression2.printProbability(dataTrainingSubset2) classTrainingSubset3[(classTrainingSubset3 != 1)] = 0 logisticRegression3 = LogisticRegression(learningRate=0.15, iterationsToStop=1500, random_state=1) logisticRegression3.learn(dataTrainingSubset3, classTrainingSubset3) logisticRegression3.printProbability(dataTrainingSubset3) multiLogisticRegression = MultiLogisticRegression(logisticRegression1, logisticRegression2, logisticRegression3) plot_decision_regions(X=dataTestSet, y=classTestSet, classifier=multiLogisticRegression) plt.xlabel(r'$x_1$') plt.ylabel(r'$x_2$') plt.title('Logistic regression') plt.legend(loc='lower right') plt.show()