1.1、Logistics Regression算法实践
  
有了上篇博客的理论准备后,接下来,我们用以及完成的函数,构建Logistics Regression分类器。我们利用线性可分的数据作为训练样本来训练。在构建模型的过程中,主要有两个步骤:(1)利用训练样本训练模型,(2)利用训练好的模型对新样本进行预测。

  1.1.1、利用训练样本训练Logistics Regression模型

    训练模型的主函数:

if __name__=="__main__":
print("------------1.load data----------------")
#导入数据
feature,lable = load_data("data.txt")
print("------------2.training-----------------")
#训练模型
w = lr_train_bgd(feature,lable,1000,0.01)
print("------------3.save model---------------")
#保存数据
save_model("weights",w)

  保存数据模块函数:

def save_model(file_name,w):
'''
:param file_name: #模型文件的保存名
:param w: #模型的权重
:return:
'''
m = np.shape(w)[0]
f_w = open(file_name,'w')
w_array = []
for i in range(m):
w_array.append(str(w[i,0]))
f_w.write('\t'.join(w_array))
f_w.close()

  加载数据的函数:

def load_data(file_name):
'''
:param file_name: 训练数据的位置
:return: 特征,标签
'''
f = open(file_name)
feature_data = []
lable_data = []
for line in f.readlines():
feature_tmp = []
lable_tmp = []
lines = line.strip().aplit("\t")
feature_tmp.append(1)#偏置项
for i in range(len(lines)-1):
feature_tmp.append(float(lines[i]))
lable_tmp.append(float(lines[-1]))
feature_data.append(feature_tmp)
lable_data.append(lable_tmp)
f.close()
return np.mat(feature_data),np.mat(lable_data)

  训练结果:

最终得到的Logistics Regression模型的权重为:

最终分隔超平面为:

    1.1.2对数据进行预测:

   对于分类算法而言,训练好的模型需要能够对新的数据集进行划分。利用上述步骤,我们训练好LR模型,并将其保存再“weights”文件中。此时我们队训练好的文件进行预测。

     预测的主函数:

if __name__=="__main__":
#导入LR模型
print("---------------------1.load model----------")
w = load_weight("weights")
n = np.shape(w)[1]
#导入测试数据
print("---------------------2.load data-----------")
testData = load_data("test_data",n)
#队测试数据进行预测
print("---------------------3.get prediction------")
h = predict(testData,w)
#保存最终数据
print("---------------------4.save prediction-----")
save_result("result",h)

Load_weight函数:

def load_weight(w):
'''导入LR模型
input: w(string)权重所在的文件位置
output: np.mat(w)(mat)权重的矩阵
'''
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)

Loda_data函数:

def load_data(file_name, n):
'''导入测试数据
input: file_name(string)测试集的位置
n(int)特征的个数
output: np.mat(feature_data)(mat)测试集的特征
'''
f = open(file_name)
feature_data = []
for line in f.readlines():
feature_tmp = []
lines = line.strip().split("\t")
# print lines[2]
if len(lines) < n - 1:
continue
feature_tmp.append(1)
for x in lines:
# print x
feature_tmp.append(float(x))
feature_data.append(feature_tmp)
f.close()
return np.mat(feature_data)

predict函数:

def predict(data, w):
'''对测试数据进行预测
input: data(mat)测试数据的特征
w(mat)模型的参数
output: h(mat)最终的预测结果
'''
h = sig(data * w.T)#sig
m = np.shape(h)[0]
for i in range(m):
if h[i, 0] < 0.5:
h[i, 0] = 0.0
else:
h[i, 0] = 1.0
return h

save_result函数:

def save_result(file_name, result):
'''保存最终的预测结果
input: file_name(string):预测结果保存的文件名
result(mat):预测的结果
'''
m = np.shape(result)[0]
#输出预测结果到文件
tmp = []
for i in range(m):
tmp.append(str(result[i, 0]))
f_result = open(file_name, "w")
f_result.write("\t".join(tmp))
f_result.close()

测试结果:

生成了一个result.txt文件:

结果为:

最新文章

  1. 【转载】在 2016 年做 PHP 开发是一种什么样的体验?(一)
  2. 用Vagrant和Ansible搭建持续交付平台
  3. Bootstrap之表单控件状态
  4. HTML基础(五)——-css样式表——样式属性——格式与布局
  5. Python super继承详解
  6. 【sqlite】python备份数据库
  7. Linux 查看 删除进程
  8. DEDE织梦,文章页里的幻灯调用,能调用全部栏目的吗
  9. 服务管理——ntp
  10. ASP.NET - 出错页
  11. HTTP SOAP Request
  12. vue.js学习第一节
  13. 一个简单的php站点配置
  14. Python学习笔记 变量
  15. complex figure
  16. Python开发——目录
  17. SpringMVC工作原理示意图
  18. 【论文学习】YOLO9000: Better,Faster,Stronger(YOLO9000:更好,更快,更强)
  19. ZJOI2019 Day1 题解
  20. PAT 1031 查验身份证(15)(C++&Python)

热门文章

  1. Lecture Sleep(前缀和)
  2. 【原创】1. MYSQL++简介
  3. Nginx 下配置Laravel 错误404
  4. Unity ios、android、pc一键打包(一)
  5. 2014蓝桥杯B组初赛试题《李白打酒》
  6. LINUX下用C语言历遍目录 C语言列出目录 dirent.h在C/C++中的使用
  7. lambda,map,filter,reduce
  8. 2.8.2 并发下的ArrayList,以及源码分析
  9. The Difference Between @Helpers and @Functions In WebMatrix
  10. .net 空接合操作符 ??