脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 基于numpy实现逻辑回归

基于numpy实现逻辑回归

2022-07-30 15:18Giao哥不瘦到100不改名 Python

这篇文章主要为大家详细介绍了基于numpy实现逻辑回归,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了基于numpy实现逻辑回归的具体代码,供大家参考,具体内容如下

基于numpy实现逻辑回归

交叉熵损失函数;sigmoid激励函数
基于numpy的逻辑回归的程序如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification
 
class logistic_regression():
    def __init__(self):
        pass
    def sigmoid(self, x):
        z = 1 /(1 + np.exp(-x))
        return z
 
    def initialize_params(self, dims):
        W = np.zeros((dims, 1))
        b = 0
        return W, b
 
    def logistic(self, X, y, W, b):
        num_train = X.shape[0]
        num_feature = X.shape[1]
        a = self.sigmoid(np.dot(X, W) + b)
        cost = -1 / num_train * np.sum(y * np.log(a) + (1 - y) * np.log(1 - a))
        dW = np.dot(X.T, (a - y)) / num_train
        db = np.sum(a - y) / num_train
        cost = np.squeeze(cost)#[]列向量,易于plot
        return a, cost, dW, db
 
    def logistic_train(self, X, y, learning_rate, epochs):
        W, b = self.initialize_params(X.shape[1])
        cost_list = []
        for i in range(epochs):
            a, cost, dW, db = self.logistic(X, y, W, b)
            W = W - learning_rate * dW
            b = b - learning_rate * db
            if i % 100 == 0:
                cost_list.append(cost)
            if i % 100 == 0:
                print('epoch %d cost %f' % (i, cost))
        params = {
            'W': W,
            'b': b
        }
        grads = {
            'dW': dW,
            'db': db
        }
        return cost_list, params, grads
 
    def predict(self, X, params):
        y_prediction = self.sigmoid(np.dot(X, params['W']) + params['b'])
        #二分类
        for i in range(len(y_prediction)):
            if y_prediction[i] > 0.5:
                y_prediction[i] = 1
            else:
                y_prediction[i] = 0
        return y_prediction
 
    #精确度计算
    def accuracy(self, y_test, y_pred):
        correct_count = 0
        for i in range(len(y_test)):
            for j in range(len(y_pred)):
                if y_test[i] == y_pred[j] and i == j:
                    correct_count += 1
        accuracy_score = correct_count / len(y_test)
        return accuracy_score
 
    #创建数据
    def create_data(self):
        X, labels = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2)
        labels = labels.reshape((-1, 1))
        offset = int(X.shape[0] * 0.9)
        #训练集与测试集的划分
        X_train, y_train = X[:offset], labels[:offset]
        X_test, y_test = X[offset:], labels[offset:]
        return X_train, y_train, X_test, y_test
 
    #画图函数
    def plot_logistic(self, X_train, y_train, params):
        n = X_train.shape[0]
        xcord1 = []
        ycord1 = []
        xcord2 = []
        ycord2 = []
        for i in range(n):
            if y_train[i] == 1:#1类
                xcord1.append(X_train[i][0])
                ycord1.append(X_train[i][1])
            else:#0类
                xcord2.append(X_train[i][0])
                ycord2.append(X_train[i][1])
        fig = plt.figure()
        ax = fig.add_subplot(111)
        ax.scatter(xcord1, ycord1, s=32, c='red')
        ax.scatter(xcord2, ycord2, s=32, c='green')#画点
        x = np.arange(-1.5, 3, 0.1)
        y = (-params['b'] - params['W'][0] * x) / params['W'][1]#画二分类直线
        ax.plot(x, y)
        plt.xlabel('X1')
        plt.ylabel('X2')
        plt.show()
 
 
if __name__ == "__main__":
    model = logistic_regression()
    X_train, y_train, X_test, y_test = model.create_data()
    print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)
    # (90, 2)(90, 1)(10, 2)(10, 1)
    #训练模型
    cost_list, params, grads = model.logistic_train(X_train, y_train, 0.01, 1000)
    print(params)
    #计算精确度
    y_train_pred = model.predict(X_train, params)
    accuracy_score_train = model.accuracy(y_train, y_train_pred)
    print('train accuracy is:', accuracy_score_train)
    y_test_pred = model.predict(X_test, params)
    accuracy_score_test = model.accuracy(y_test, y_test_pred)
    print('test accuracy is:', accuracy_score_test)
    model.plot_logistic(X_train, y_train, params)

结果如下所示:

基于numpy实现逻辑回归

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/exsolar_521/article/details/108206644

延伸 · 阅读

精彩推荐
  • Pythontensorflow 1.0用CNN进行图像分类

    tensorflow 1.0用CNN进行图像分类

    这篇文章主要为大家详细介绍了tensorflow 1.0用CNN进行图像分类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    denny40210322021-01-31
  • Python深入解析Python中的__builtins__内建对象

    深入解析Python中的__builtins__内建对象

    __builtins__ 是内建模块__builtin__中的对象,使用Python中的内建函数时会通过__builtins__引导,这里我们就来深入解析Python中的__builtins__内建对象,需要的朋友可以参...

    牧歌_3142020-08-29
  • Python在Python中操作时间之tzset()方法的使用教程

    在Python中操作时间之tzset()方法的使用教程

    这篇文章主要介绍了在Python中操作时间之tzset()方法的使用教程,是Python学习中的基础知识,需要的朋友可以参考下...

    Python教程网3712020-07-06
  • PythonPython求解任意闭区间的所有素数

    Python求解任意闭区间的所有素数

    本篇文章是一篇关于python求素数的知识点内容,如果大家在应用中有用的到,不妨跟着学习下。...

    afanty_mo11482021-03-03
  • Pythonpython Opencv实现停车位识别思路详解

    python Opencv实现停车位识别思路详解

    这篇文章主要介绍了Opencv实现停车位识别,本文通过示例代码场景分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    Keep_Trying_Go6152022-07-04
  • PythonPython进阶-函数默认参数(详解)

    Python进阶-函数默认参数(详解)

    下面小编就为大家带来一篇Python进阶-函数默认参数(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    珞樱缤纷4922020-11-07
  • PythonPython实现绘制多角星实例

    Python实现绘制多角星实例

    这篇文章要给大家分享Python实现绘制多角星的实例,在具备一定的Python编程基础以后,我们可以结合for循环进行多角星的编写,只要简单的几次循环,即可以极大...

    邓雪婷11352022-03-03
  • PythonPython 面试中 8 个必考问题

    Python 面试中 8 个必考问题

    这篇文章主要介绍了Python 面试中 8 个必考问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    everfigt11352021-04-20