线性逻辑回归的梯度下降算法python实现
发布日期:2021-05-28 17:02:19
浏览次数:28
分类:技术文章
本文共 2661 字,大约阅读时间需要 8 分钟。
线性逻辑回归的梯度下降算法python实现
前言: 逻辑回归是解决分类问题的一种的方法,关于逻辑回归的具体理论知识
一、逻辑回归python实现示例代码
import matplotlib.pyplot as pltimport numpy as npfrom sklearn.metrics import classification_reportfrom sklearn import preprocessing# 数据是否需要标准化scale = False# 读取数据data = np.genfromtxt('LR-testSet.csv', delimiter=',')x_data = data[:, 0:-1]y_data = data[:, -1, np.newaxis]# 绘制各类别的数据散点图def plotClass(): x0 = [] y0 = [] x1 = [] y1 = [] for i in range(len(x_data)): if y_data[i] == 0: x0.append(x_data[i, 0]) y0.append(x_data[i, 1]) else: x1.append(x_data[i, 0]) y1.append(x_data[i, 1]) # 绘图 s1 = plt.scatter(x0, y0, c='b', marker='o') s2 = plt.scatter(x1, y1, c='r', marker='x') plt.legend(handles=[s1, s2], labels=['class0', 'class1'])# 给样本添加偏置值项X_data = np.concatenate((np.ones((100, 1)), x_data), axis=1)# 定义逻辑回归的模型函数(S型函数)def sigmoid(x): return 1 / (1 + np.exp(-x))# 计算代价值def cost(xMat, yMat, ws): left = np.multiply(yMat, np.log(sigmoid(xMat * ws))) right = np.multiply(1 - yMat, np.log(1 - sigmoid(xMat * ws))) return np.sum(left + right) / -len(xMat)# 梯度下降算法def gradAscent(xArr, yArr): if scale: xArr = preprocessing.scale(xArr) xMat = np.mat(xArr) yMat = np.mat(yArr) # 学习率 lr = 0.001 # 梯度下降迭代次数 ite = 10000 # 记录梯度下降过程中的代价值 costList = [] # 计算数据行列数 m, n = np.shape(xMat) # 初始化线性函数权重 ws = np.mat(np.ones((n, 1))) for i in range(ite + 1): h = sigmoid(xMat * ws) ws_grad = xMat.T * (h - yMat) / m ws = ws - lr * ws_grad if i % 50 == 0: costList.append(cost(xMat, yMat, ws)) return ws, costListws, costList = gradAscent(X_data, y_data)# 画决策边界if not scale: plotClass() x_test = [[-4], [3]] y_test = (-ws[0] - x_test * ws[1]) / ws[2] plt.plot(x_test, y_test, 'k')# 绘制代价值的变化plt.figure()x = np.linspace(0, 10000, 201)plt.plot(x, costList, c='r')plt.title('Train')plt.xlabel('iteration')plt.ylabel('cost')# 根据训练的模型进行预测类型def predict(x_data, ws): if scale: x_data = preprocessing.scale(x_data) xMat = np.mat(x_data) ws = np.mat(ws) return [1 if x >= 0.5 else 0 for x in sigmoid(xMat * ws)]predictions = predict(X_data, ws)# 计算准确率,召回率,F1值print(classification_report(y_data, predictions))plt.show()
二、执行结果
precision recall f1-score support 0.0 0.82 1.00 0.90 47 1.0 1.00 0.81 0.90 53 micro avg 0.90 0.90 0.90 100 macro avg 0.91 0.91 0.90 100weighted avg 0.92 0.90 0.90 100三、数据下载 链接:https://pan.baidu.com/s/1cOxjGUyVbf3qDtPFPJKqwA 提取码:1mlo
转载地址:https://blog.csdn.net/qq_34720818/article/details/105884810 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年09月13日 01时08分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
hdu 1295 Move Move Look
2019-06-07
APS.NET MVC入门-运行基础示例
2019-06-07
springboot静态资源映射
2019-06-07
CSS学习摘要-盒子模型
2019-06-07
MySql学习笔记(一) —— 关键字的使用
2019-06-07
HyperLedger Fabric 1.4 超级账本起源(5.1)
2019-06-07
面向对象的特征有哪些方面?
2019-06-07
数学图形(2.7)sphere sine wave
2019-06-07
数学图形之鞍面
2019-06-07
seajs +gruntjs 合作开发
2019-06-07
[5]windows内核情景分析---进程线程
2019-06-07
Fluuter常遇到的问题
2019-06-07
Poj 2662,2909 Goldbach's Conjecture (素数判定)
2019-06-07
Longest Palindromic Substring
2019-06-07
ps,mp,html
2019-06-07
C/C++字符串使用整理
2019-06-07
windows下的txt文件传到Linux下中文乱码问题
2019-06-07