1.逻辑斯蒂回归代码实现
"""
@author: liujie
@software: PyCharm
@file: logistic.py
@time: 2020/10/23 21:22
"""
import time
import numpy as np
from tqdm import tqdm
def loaddata(filename):
"""
加载数据
:param filename: 文件路径
:return: 返回数据与标签
"""
dataList = []
labelList = []
fr = open(filename,'r')
for line in tqdm(fr.readlines()):
curLine = line.strip().split(',')
dataList.append([int(num) / 255 for num in curLine[1:]])
if int(curLine[0]) == 0:
labelList.append(1)
else:
labelList.append(0)
return dataList,labelList
def logisticRegression(trainDataList,trainLabelList,iter=200):
"""
二项逻辑斯蒂回归训练过程
:param trainDataList: 训练数据
:param trainLabelList: 训练数据标签
:param iter: 迭代轮数
:return: 学习的w
"""
for i in tqdm(range(len(trainDataList))):
trainDataList[i].append(1)
trainDataArr = np.array(trainDataList)
w = np.zeros(trainDataArr.shape[1])
h = 0.001
for i in range(iter):
for j in range(len(trainDataArr)):
wx = np.dot(w,trainDataArr[j])
xi = trainDataArr[j]
yi = trainLabelList[j]
w += h * (xi * yi - (1 + np.exp(wx) * xi) / (1 + np.exp(wx)))
return w
def predict(w,x):
"""
预测标签
:param testDataList: 测试数据
:param w: 训练学到的w
:return: 返回预测标签
"""
wx = np.dot(w, x)
p = np.exp(wx) /(1 + np.exp(wx))
if p > 0.5:
return 1
else:
return 0
def model_test(testDataList,testLabelList,w):
"""
验证准确率
:param testDataList: 测试数据
:param testLabelList:测试数据标签
:param w:训练学到的w
:return:acc
"""
for i in range(len(testDataList))