1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn.datasets.samples_generator import make_classification
  4. def initialize_params(dims):
  5. w = np.zeros((dims, 1))
  6. b = 0
  7. return w, b
  8. def sigmoid(x):
  9. z = 1 / (1 + np.exp(-x))
  10. return z
  11. def logistic(X, y, w, b):
  12. num_train = X.shape[0]
  13. y_hat = sigmoid(np.dot(X, w) + b)
  14. loss = -1 / num_train * np.sum(y * np.log(y_hat) + (1-y) * np.log(1-y_hat))
  15. cost = -1 / num_train * np.sum(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat))
  16. dw = np.dot(X.T, (y_hat - y)) / num_train
  17. db = np.sum(y_hat - y) / num_train
  18. return y_hat, cost, dw, db
  19. def linear_train(X, y, learning_rate, epochs):
  20. # 参数初始化
  21. w, b = initialize_params(X.shape[1])
  22. loss_list = []
  23. for i in range(epochs):
  24. # 计算当前的预测值、损失和梯度
  25. y_hat, loss, dw, db = logistic(X, y, w, b)
  26. loss_list.append(loss)
  27. # 基于梯度下降的参数更新
  28. w += -learning_rate * dw
  29. b += -learning_rate * db
  30. # 打印迭代次数和损失
  31. if i % 10000 == 0:
  32. print("epoch %d loss %f" % (i, loss))
  33. # 保存参数
  34. params = {
  35. 'w': w,
  36. 'b': b
  37. }
  38. # 保存梯度
  39. grads = {
  40. 'dw': dw,
  41. 'db': db
  42. }
  43. return loss_list, loss, params, grads
  44. def predict(X, params):
  45. w = params['w']
  46. b = params['b']
  47. y_pred = sigmoid(np.dot(X, w) + b)
  48. return y_pred
  49. if __name__ == "__main__":
  50. # 生成数据
  51. X, labels = make_classification(n_samples=100,
  52. n_features=2,
  53. n_informative=2,
  54. n_redundant=0,
  55. random_state=1,
  56. n_clusters_per_class=2)
  57. print(X.shape)
  58. print(labels.shape)
  59. # 生成伪随机数
  60. rng = np.random.RandomState(2)
  61. X += 2 * rng.uniform(size=X.shape)
  62. # 划分训练集和测试集
  63. offset = int(X.shape[0] * 0.9)
  64. X_train, y_train = X[:offset], labels[:offset]
  65. X_test, y_test = X[offset:], labels[offset:]
  66. y_train = y_train.reshape((-1, 1))
  67. y_test = y_test.reshape((-1, 1))
  68. print('X_train=', X_train.shape)
  69. print('y_train=', y_train.shape)
  70. print('X_test=', X_test.shape)
  71. print('y_test=', y_test.shape)
  72. # 训练
  73. loss_list, loss, params, grads = linear_train(X_train, y_train, 0.01, 100000)
  74. print(params)
  75. # 预测
  76. y_pred = predict(X_test, params)
  77. print(y_pred[:10])

Python实现机器学习算法:逻辑回归的更多相关文章

  1. Python机器学习算法 — 逻辑回归(Logistic Regression)

    逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...

  2. 100天搞定机器学习|Day8 逻辑回归的数学原理

    机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...

  3. 机器学习二 逻辑回归作业、逻辑回归(Logistic Regression)

    机器学习二 逻辑回归作业   作业在这,http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/hw2.pdf 是区分spam的. 57 ...

  4. 分布式机器学习:逻辑回归的并行化实现(PySpark)

    1. 梯度计算式导出 我们在博客<统计学习:逻辑回归与交叉熵损失(Pytorch实现)>中提到,设\(w\)为权值(最后一维为偏置),样本总数为\(N\),\(\{(x_i, y_i)\} ...

  5. 【机器学习】逻辑回归(Logistic Regression)

    注:最近开始学习<人工智能>选修课,老师提纲挈领的介绍了一番,听完课只了解了个大概,剩下的细节只能自己继续摸索. 从本质上讲:机器学习就是一个模型对外界的刺激(训练样本)做出反应,趋利避害 ...

  6. 机器学习 (三) 逻辑回归 Logistic Regression

    文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...

  7. 机器学习:逻辑回归(OvR 与 OvO)

    一.基础理解 问题:逻辑回归算法是用回归的方式解决分类的问题,而且只可以解决二分类问题: 方案:可以通过改造,使得逻辑回归算法可以解决多分类问题: 改造方法: OvR(One vs Rest),一对剩 ...

  8. 机器学习之逻辑回归(Logistic)笔记

    在说逻辑回归之前,可以先说一说逻辑回归与线性回归的区别: 逻辑回归与线性回归在学习规则形式上是完全一致的,它们的区别在于hθ(x(i))为什么样的函数 当hθ(x(i))=θTx(i)时,表示的是线性 ...

  9. python sklearn库实现逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Red ...

  10. 机器学习之逻辑回归(Logistic Regression)

    1. Classification 这篇文章我们来讨论分类问题(classification problems),也就是说你想预测的变量 y 是一个离散的值.我们会使用逻辑回归算法来解决分类问题. 之 ...

随机推荐

  1. NSOperation、NSOperationQueue(II)

    NSOperationQueue 控制串行执行.并发执行 NSOperationQueue 创建的自定义队列同时具有串行.并发功能 这里有个关键属性 maxConcurrentOperationCou ...

  2. 城市里的间谍B901

    城市里的间谍   城市里的间谍 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 某城市的地铁是线性的,有 n(2 <= n ...

  3. ubuntu16.04——WingIDE安装 操作服务器是一件很好玩的事情

    1.在服务器上部署环境时,区分linux 系统和winddos系统 2.下载安装包: 3.输入命令操作 4.进入相对应的目录下: 5.命令 6.发生错误,更新环境 7.安装成功

  4. python mmap对象

    ----使用内存映射的原因 为了随机访问文件的内容,使用mmap将文件映射到内存中是一个高效和优雅的方法.例如,无需打开一个文件并执行大量的seek(),read(),write()调用,只需要简单的 ...

  5. HashMap集合存储自定义类

    第一种情况,key为String,value为自定义类person类: 输出结果,key重复的被去掉了,key重复的那个value值之前的被最后一个覆盖了: 第二种情况,key为自定义类person类 ...

  6. Robot Framework 自动化测试--部署篇

    一.产品介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架.它是为了端 到端的验收测试(End-To-End Acceptance Test)以及验收测试 ...

  7. 常用正则表达式爬取网页信息及HTML分析总结

    Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取<tr></tr>标签之间内容 2.获取<a href..></a>超链接之间内容 3 ...

  8. python之字符串函数

    1.  endswith()  startswith() # 以什么什么结尾 # 以什么什么开始 test = "alex" v = test.endswith('ex') v = ...

  9. zabbix实现电话、短信、邮件报警

    该报警方式提前说明:(1)该方式可以实现zabbix免费电话报警以及微信.短信.邮件报警,但有数量限制.详见如下:如数量不能满足需要以及人员需要,可以考虑购买收费版.(2)毕竟是免费版,电话通知要省着 ...

  10. Python进阶【第二篇】编写Python代码

    一.第一句Python代码——Hello Word 在 /home/dev/ 目录下创建 hello.py 文件,内容如下: print "hello,world" 执行 hell ...