zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python实现logistics回归

Python 实现 回归
2023-09-14 09:14:57 时间
import numpy as np
def sigmoid(x):
    #请补全逻辑回归函数
    return 1.0/(1+np.exp(-x))
def predict(x_test, weight):
    if sigmoid(weight.T @ x_test) > 0.5:
        return 1
    return 0
#实现逻辑回归的训练
def fit(x, y):
    m, n = x.shape
    w = np.zeros(n).reshape((n,1))
    y = y.reshape((m,1))
    r = 0.001 #learning rate
    cnt = 0
    max_cnt = 10000 #设置最大迭代次数
    t = 0.00001 #设置收敛条件
    #利用梯度下降方法求最优解
    #............................
    for i in range(max_cnt):
        # x:11*3 w:3*1 
        de = np.dot(x.T, y - sigmoid(np.dot(x,w)))
        w += r*de

        if np.linalg.norm(r*de)<=t:
            break
        
   
        # w:3*1
    return w
if __name__ == '__main__':
    x_train = np.array([
        [1, 2.697, 6.254],
        [1, 1.872, 2.014],
        [1, 2.312, 0.812],
        [1, 1.983, 4.990],
        [1, 0.932, 3.920],
        [1, 1.321, 5.583],
        [1, 2.215, 1.560],
        [1, 1.659, 2.932],
        [1, 0.865, 7.362],
        [1, 1.685, 4.763],
        [1, 1.786, 2.523]
    ])
    y_train = np.array([1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1])
weight = fit(x_train, y_train)
print(weight)
lis = []
#调用预测函数,输出x_train的预测结果,并输出准确率
for i in range(11):
    lis.append(predict(x_train[i],weight))
print(lis)
n = 0 # 正确计数 
for i in range(11):
    if lis[i] == y_train[i]:
        n+=1
print("正确率%s%%" %(n/11*100))
[[-3.29407748]
 [ 0.02245258]
 [ 0.79967711]]
[1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0]
正确率81.81818181818183%