# coding:UTF-8
import numpy as np
# 逻辑回归训练模型用函数
def sig(x):
“““
# sigmoid函数
:param x:
:return:
“““
return 1.0 / (1 + np.exp(-x))
def load_file(filename):
“““
input:filename(string)训练数据的位置
output:feature_data(mat)特征
label_data(mat)标签
“““
f = open(filename) # 打开文件
feature_data = []
label_data = []
for line in f.readlines():
feature_tmp = []
label_tmp = []
lines = line.strip().split(‘\t‘) # strip移除末尾换行符 #通过指定分隔符对字符串进行切片
feature_tmp.append(1) # 偏置项
for i in range(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 error_rate(h label):
“““
计算当前损失函数的值
:param h(mat): 预测值
:param label(mat) :实际值
:return:err/m(float):错误率
“““
m = np.shape(h)[0]
sum_err = 0.0
for i in range(m):
if h[i 0] > 0 and (1 - h[i 0]) > 0:
sum_err -= (label[i 0] * np.log(h[i 0])) + \
(1 - label[i 0]) * np.log(1 - h[i 0])
else:
sum_err -= 0
return sum_err / m
def lr_train_bgd(feature label maxCycle alpha):
“““
利用梯度下降法训练LR模型
:param feature (mat):特征
:param label(mat):标签
:param maxCycle(int):最大迭代次数
:param alpha(float):学习速率
:return:w(mat)权重
“““
n = np.shape(feature)[1] # 特征个数,特征第一维的长度
w = np.mat(np.ones((n 1))) # 初始化权重
i = 0
while i h = sig(feature * w) # 计算Sigmoid值
err = label - h
if i % 100 == 0:
print(“\t-----------iter = “ + str(i) + \
“ train error rate = “ + str(error_rate(h label)))
w = w + alpha * feature.T * err # 权重修正
i += 1
return w
def save_model(filename w):
“““
保存最终的模型
:param filename(string):模型保存的文件名
:param w(mat):LR模型的权重
:return:
“““
m = np.shape(w)[0]
f_w = open(filename ‘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_weight(w):
“““
导入LR模型
:param w:(string)权重所在的文件位置
:return:np.mat(w)mat权重的矩阵
“““
f = open(w)
w = []
for line in f.readlines():
lines = line.strip().split(“\t“) # strip()去除首尾空字符#split切片
w_tmp = []
for x in lines:
w_tmp.append(float(x))
w.append(w_tmp)
f.close()
return np.mat(w)
def load_teData(filename n):
“““
导入测试数据集
:param filename:文件名
:param n:特征个数
:return:np.mat(feature_data)(mat)测试集的特征
“““
f = open(filename)
feature_data = []
for line in f.readlines():
feature_temp = []
lines = line.strip()
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-10-30 16:33 逻辑回归\
目录 0 2018-10-30 16:34 逻辑回归\.idea\
文件 637 2018-10-23 11:30 逻辑回归\.idea\Case1.iml
文件 128 2018-10-05 20:40 逻辑回归\venv\pyvenv.cfg
文件 294 2018-10-05 20:40 逻辑回归\.idea\misc.xm
文件 269 2018-10-05 20:40 逻辑回归\.idea\modules.xm
文件 239 2018-10-23 11:30 逻辑回归\.idea\other.xm
文件 31539 2018-10-30 16:34 逻辑回归\.idea\workspace.xm
文件 4498 2018-10-30 16:29 逻辑回归\LR_functions.py
文件 714 2018-10-30 16:33 逻辑回归\LR_test.py
文件 1520 2018-10-30 10:41 逻辑回归\LR_train.py
目录 0 2018-10-15 11:02 逻辑回归\__pycache__\
文件 2498 2018-10-15 11:02 逻辑回归\__pycache__\LR_functions.cpython-36.pyc
文件 28312 2018-10-05 20:40 逻辑回归\venv\sc
文件 799 2018-10-30 16:32 逻辑回归\testResult
文件 6850 2018-10-30 15:20 逻辑回归\test_data
文件 5361 2018-10-14 22:28 逻辑回归\trainingData
目录 0 2018-10-30 11:41 逻辑回归\venv\
文件 87888 2018-10-05 20:40 逻辑回归\venv\sc
目录 0 2018-10-13 21:45 逻辑回归\venv\Lib\
目录 0 2018-10-13 21:45 逻辑回归\venv\Lib\site-packages\
文件 55 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\easy-install.pth
目录 0 2018-10-13 21:45 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\
目录 0 2018-10-13 21:45 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\
文件 2972 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\PKG-INFO
文件 12502 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\SOURCES.txt
文件 1 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\dependency_li
文件 98 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\entry_points.txt
文件 2 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\not-zip-safe
文件 74 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\requires.txt
文件 4 2018-10-05 20:40 逻辑回归\venv\Lib\site-packages\pip-10.0.1-py3.6.egg\EGG-INFO\top_level.txt
............此处省略381个文件信息