数据集
| ![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/d05d9dfd09a56332.webp)
代码
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import mathdef sigmoid(x):return 1/(1 + math.e ** (-x))def cal(w1, w2, x1, x2, b):return sigmoid(w1*x1 + w2*x2 + b)data = pd.read_csv('data3_0.csv',encoding = "gbk")
X1 = data[u"密度"]
X2 = data[u"甜度"]
Label = data[u"好or坏"]
w1 = 0.0
w2 = 0.0
b = 0.0
learing_rate = 0.5
acc = 0.0
epoch = 0for epoch in range(1000):delta_w = np.zeros((2,1),dtype = float)delta_b = 0.0accurate = 0for i in range(len(X1)):x1 = X1[i]x2 = X2[i]label = Label[i]predict_y = cal(w1,w2,x1,x2,b)if (predict_y >= 0.5) == label:accurate = accurate + 1delta_w[0] += learing_rate*x1*(label - predict_y)delta_w[1] += learing_rate*x2*(label - predict_y)delta_b += learing_rate*(label - predict_y)w1 += delta_w[0]w2 += delta_w[1]b += delta_b)acc = accurate / len(X1)
plt.scatter(X1,X2,c = Label)
plt.show()print("epoch %d's accurary = %f%%" % (epoch,acc*100))
print("w1 = %f,w2 = %f,b = %f"% (w1,w2,b))
分析
最终输出:
epoch 999's accurary = 70.588235%w1 = 3.156135,w2 = 12.541667,b = -4.431267
散点图:
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/5b97d3b808d031e2.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NjMzMjA4,size_16,color_FFFFFF,t_70)
可以看出此图并不便于进行二分类,这也是逻辑回归在此数据集表现不佳的原因