代码、数据已经上传,可以自主下载。https://download.csdn.net/download/shenziheng1/10719760

1. 训练过程

import numpy as npdef load_data(file_name):"""input: file_name(string)output: feature_data(mat)label_data(mat)"""f = open(file_name,"r")feature_data = []label_data = []for line in f.readlines():feature_tmp = []label_tmp = []lines = line.strip().split("\t")feature_tmp.append(1)  # x0 = 1for i in xrange(len(lines)-1):feature_tmp.append(float(lines[i]))label_tmp.append(float(lines[-1]))feature_data.append(feature_tmp)label_data.append(label_tmp)f.close()return np.mat(feature_data), np.mat(label_data)def sig(x):"""sigmiod function"""return 1.0 / (1 + np.exp(-x))def error_rate(h, label):"""input:  h(mat)      predicting datalabel(mat)  labelsoutput: err/m(float) false ratio"""m = np.shape(h)[0]sum_err = 0.0for i in xrange(m):if h[i,0] > 0 and (1 - h[i,0]) >0:sum_err = sum_err - (label[i,0] * np.log(h[i,0]) +(1-label[i,0]) * np.log(1-h[i,0]))else:sum_err = sum_errreturn sum_err / mdef lr_train_bgd(feature, label, maxCycle, alpha):"""input: feature(mat)label(mat)maxcycle(int)alpha(float)output: w(mat) weights"""n = np.shape(feature)[1] # the number of featurew = np.mat(np.ones((n,1))) # the number of weighti = 0while i <= maxCycle:i = i+1h = sig(feature * w)err = label - hif i % 100 == 0:print "\t--------iter=" + str(i) + \", train error rate=" + str(error_rate(h, label))w = w + alpha * feature.T * err # modifying weightsreturn wdef save_model(file_name, w):"""input: file_name(string) the filepath for saving modelw weights"""m = np.shape(w)[0]f_w = open(file_name, "w")w_array = []for i in xrange(m):w_array.append(str(w[i,0]))f_w.write("\t".join(w_array))f_w.close()#def imgplot(feature, w):if __name__ == "__main__":""" import training data """print "--------load data--------"feature, label = load_data("data.txt")""" training logistic regression model """print "--------training--------"w = lr_train_bgd(feature, label, 1000, 0.01)""" save model """print "--------save model---------"save_model("weights",w)

训练结果为:

2. 测试代码

import numpy as np
from logistic_training import sigdef load_weight(w):f = open(w)w = []for line in f.readlines():lines = line.strip().split("\t")w_tmp = []for x in lines:w_tmp.append(float(x))w.append(w_tmp)f.close()return np.mat(w)def load_data(file_name, n):f = open(file_name)feature_data = []for line in f.readlines():feature_tmp = []lines = line.strip().split("\t")if len(lines) <> n - 1:continuefeature_tmp.append(1)for x in lines:feature_tmp.append(float(x))feature_data.append(feature_tmp)f.close()return np.mat(feature_data)def predict(data, w):h = sig(data * w.T)m = np.shape(h)[0]for i in xrange(m):if h[i, 0] < 0.5:h[i, 0] = 0.0else:h[i, 0] = 1.0return hdef save_result(file_name, result):m = np.shape(result)[0]tmp = []for i in xrange(m):tmp.append(str(result[i, 0]))f_result = open(file_name, "w")f_result.write("\t".join(tmp))f_result.close()if __name__ == "__main__":"""loading LR model"""print "--------load model---------"w = load_weight("weights")n = np.shape(w)[1]"""loading testing data"""testData = load_data("test_data", n)"""predicting test data"""print "--------prediction--------"h = predict(testData, w)print h"""save prediction results"""print "--------save prediction--------"save_result("results", h)

3. 补充知识

  • readlines():  用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。如果碰到结束符 EOF 则返回空字符串。
  • strip():用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
str = "00000003210Runoob01230000000";
print str.strip( '0' ); # 去除首尾字符 0>>> 3210Runoob0123
  • join(): 用于将序列中的元素以指定的字符连接生成一个新的字符串
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );>>> a-b-c

[实践篇] 逻辑回归相关推荐

  1. 逻辑回归 - 理论篇

    此文章为初学机器学习时,对Andrew NG<机器学习>课程整理所写,也参考了其他CSDN同学的笔记,写的较为粗糙,很多网友帮助我指正了问题,现在重新更新向量化部分,并加入实践篇. 什么是 ...

  2. 朴素贝叶斯与逻辑回归区别

    朴素贝叶斯与逻辑回归有什么异同 1.上述链接大佬详细的介绍了朴素贝叶斯.逻辑回归的由来. 2.在B站李宏毅老师机器学习课中第4讲Classification中提到了从贝叶斯公式推导出逻辑函数的激活函数 ...

  3. TensorFlowMNIST数据集逻辑回归处理

    本节基于回归学习对 MNIST 数据集进行处理,但将添加一些 TensorBoard 总结以便更好地理解 MNIST 数据集. MNIST由https://www.tensorflow.org/get ...

  4. 线性回归、逻辑回归及SVM

    1,回归(Linear Regression) 回归其实就是对已知公式的未知参数进行估计.可以简单的理解为:在给定训练样本点和已知的公式后,对于一个或多个未知参数,机器会自动枚举参数的所有可能取值(对 ...

  5. 逻辑回归算法原理简介

    1,逻辑回归简介 逻辑回归完成分类任务,是经典的二分类算法(也可以解决多分类问题),机器学习算法一般选择先逻辑回归(优先选择)再用复杂的,逻辑回归的决策边界可以是非线性的(高阶).可以通过参数对结果进 ...

  6. 机器学习(14)逻辑回归(实战) -- 癌症分析

    目录 试错 一.读取数据 二.划分数据集 三.对训练集和测试集标准化 四.创建逻辑回归预估器,训练得到模型 五.模型评估 总代码 试错 这里必须要做对缺失数据的处理,否则会报错: ValueError ...

  7. 机器学习(14)逻辑回归(理论)

    目录 一.逻辑回归应用场景 二.逻辑回归原理 三.损失 四.类别划分 1.真实值属于该类别(y=1) 2.真实值不属于该类别(y=0) 3.完整损失函数 4.逻辑回归计算过程(重要) 1.先线性回归, ...

  8. 逻辑回归代码_Pytorch教程(四):逻辑回归

    今天我将为大家介绍逻辑回归的含义并展示Pytorch实现逻辑回归的方法,先我们来看看一个问题. 问题: 大家想必对MNIST数据集已经非常熟悉了吧?这个数据集被反复"咀嚼",反复研 ...

  9. 机器学习与高维信息检索 - Note 3 - 逻辑回归(Logistic Regression)及相关实例

    逻辑回归 Logistic Regression 3. 逻辑回归 补充: 凸性 Convexity 定义3.1 定理3.2 定理3.3 成本函数的凸性 3.1逻辑回归的替代方法 3.2 线性可分性和逻 ...

最新文章

  1. mysql 0x80004005 unable to connect to any of the specified mysql hosts
  2. mysql 给min值取别名_mysql基本命令
  3. 怎么修改docker镜像的名字_Docker这些none:none的镜像,难道就不配拥有名字吗
  4. python写网站 linux_linux下利用nginx部署python网站
  5. 折半查找python实现
  6. 本地安装 SAP Commerce 实例
  7. FFMPEG解码264文件步骤
  8. zip版mysql5.6_mysql 5.6 压缩包版安装方法
  9. idea怎么设置选中文件时,自动在左侧弹出文件所在位置及文件
  10. java run() 返回值_java线程的run()没有返回值怎么办?
  11. 编程之美 4.6桶中取黑白球
  12. QT高级编程技巧(二)-- 编写多线程和并发应用
  13. Navicat 常见操作
  14. 用跨进程子类化技术实现对其它进程消息的拦载
  15. 预留度数Rx表达式的推导
  16. 进阶-第92_es生产集群部署之必须根据自己的集群设置的一些重要参数
  17. 周转时间和带权周转时间的计算
  18. 解读京东提出的第四次零售革命
  19. 基于Oneplus 7 Pro的Flyme9&MIUI12.5刷机教程
  20. Linux下的clk学习

热门文章

  1. iOS总结:项目中的各种小坑汇总
  2. 两个Fragment之间如何传递数据
  3. Eclipse:Cannot complete the install because of a conflicting dependency.问题解决
  4. Multi Dimension 数据库设计
  5. nyoj 1261 音痴又音痴的LT(离散化+树状数组求K小数)
  6. hdu 1086(判断两线段是否相交)
  7. idea删除module
  8. 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
  9. 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)
  10. 解决properties文件乱码问题(eclipse和MyEclipse)