首先,Logistic不是纯粹的线性模型,他也可以说是一种概率估计的模型;他不是回归模型,而是一种二分类模型
class
sklearn.linear_model.
LogisticRegression
(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)penalty可以是第一范式,也可以是第二范式,从中文意思来说,就是惩罚因子
solver:'newton-cg','lbfgs','liblinear','sag','saga';这个参数非常非常重要了;就是最优化中用了什么方法,比如说这个sag就是平均随机梯度下降算法方式,总之很重要;newton-cg指的是牛顿法么,还是共轭下降....我不太确定和了解........
max_iter当然有这个迭代次数....控制时间,精度啥的,太多的迭代也会出问题.....
PS:Logistic回归分成两个部分,第一个部分是Z=w0x0+w1x1+...+wnxn;将Z带入sigmod函数,如果sigmod(Z)>0.5 结果是1;sigmod(Z)<0.5 结果是0;所以为了使分类更加精确,使得Z这个输入更加完美(不可能让sigmod(Z)变得完美);所以就要使得Z=w0x0+w1x1+...+wnxn这个线性模型中的权值W变得更加完美。也就是我们说的最优化理论(使得一个可以用函数表达的式子的参数更好-->最优化理论帮忙)
Logistic 回归 工作原理
每个回归系数初始化为 1 重复 R 次: 计算整个数据集的梯度 使用 步长 x 梯度 更新回归系数的向量 返回回归系数
Logistic 回归 开发流程
收集数据: 采用任意方法收集数据 准备数据: 由于需要进行距离计算,因此要求数据类型为数值型。另外,结构化数据格式则最佳。 分析数据: 采用任意方法对数据进行分析。 训练算法: 大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数。 测试算法: 一旦训练步骤完成,分类将会很快。 使用算法: 首先,我们需要输入一些数据,并将其转换成对应的结构化数值;接着,基于训练好的回归系数就可以对这些数值进行简单的回归计算,判定它们属于哪个类别;在这之后,我们就可以在输出的类别上做一些其他分析工作。
Logistic 回归 算法特点
优点: 计算代价不高,易于理解和实现。 缺点: 容易欠拟合,分类精度可能不高。 适用数据类型: 数值型和标称型数据。
from numpy import *
def loadDataSet():
dataMat = []; labelMat = []
fr = open('testSet.txt')
for line in fr.readlines():
lineArr = line.strip().split()
dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
labelMat.append(int(lineArr[2]))
return dataMat,labelMatdef sigmoid(inX):
return 1.0/(1+exp(-inX))def gradAscent(dataMatIn, classLabels):
dataMatrix = mat(dataMatIn) #convert to NumPy matrix
labelMat = mat(classLabels).transpose() #convert to NumPy matrix
m,n = shape(dataMatrix)
alpha = 0.001
maxCycles = 500
weights = ones((n,1))
for k in range(maxCycles): #heavy on matrix operations
h = sigmoid(dataMatrix*weights) #matrix mult
error = (labelMat - h) #vector subtraction
weights = weights + alpha * dataMatrix.transpose()* error #matrix mult
return weightsdef plotBestFit(weights):
import matplotlib.pyplot as plt
dataMat,labelMat=loadDataSet()
dataArr = array(dataMat)
n = shape(dataArr)[0]
xcord1 = []; ycord1 = []
xcord2 = []; ycord2 = []
for i in range(n):
if int(labelMat[i])== 1:
xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2])
else:
xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
ax.scatter(xcord2, ycord2, s=30, c='green')
x = arange(-3.0, 3.0, 0.1)
y = (-weights[0]-weights[1]*x)/weights[2]
ax.plot(x, y)
plt.xlabel('X1'); plt.ylabel('X2');
plt.show()def stocGradAscent0(dataMatrix, classLabels):
m,n = shape(dataMatrix)
alpha = 0.01
weights = ones(n) #initialize to all ones
for i in range(m):
h = sigmoid(sum(dataMatrix[i]*weights))
error = classLabels[i] - h
weights = weights + alpha * error * dataMatrix[i]
return weightsdef stocGradAscent1(dataMatrix, classLabels, numIter=150):
m,n = shape(dataMatrix)
weights = ones(n) #initialize to all ones
for j in range(numIter):
dataIndex = range(m)
for i in range(m):
alpha = 4/(1.0+j+i)+0.0001 #apha decreases with iteration, does not
randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constant
h = sigmoid(sum(dataMatrix[randIndex]*weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weightsdef classifyVector(inX, weights):
prob = sigmoid(sum(inX*weights))
if prob > 0.5: return 1.0
else: return 0.0def testLR():
# 1.收集并准备数据
dataMat, labelMat = loadDataSet()
# print dataMat, '---\n', labelMat
# 2.训练模型, f(x)=a1*x1+b2*x2+..+nn*xn中 (a1,b2, .., nn).T的矩阵值
# 因为数组没有是复制n份, array的乘法就是乘法
dataArr = array(dataMat)
# print dataArr
weights = gradAscent(dataArr, labelMat)
# print(weights)
# weights = stocGradAscent0(dataArr, labelMat)
# weights = stocGradAscent1(dataArr, labelMat)
# print '*'*30, weights# 数据可视化
plotBestFit(weights.getA())
python广义加性模型 python 广义线性模型
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
广义线性模型代码 广义线性模型glm
原文链接: 拓端数据科技 / Welcome to tecdattecdat.cn 考虑简单的泊松回归 。给定的样本 ,其中 ,目标是导出用于一个95%的置信区间 给出 ,其中 是预测。因此,我们要导出预测的置信区间,而不是观测值,即下图的点1. > r=glm(dist
广义线性模型代码 pcl 使用gpu计算法向量 r语言 计算模型的rmse 线性模型 线性回归 -
spring boot orm 推荐
Spring boot 简介 是一个简化Spring 应用开发的一个框架 ; 是整合了整个Spring技术栈的集合。 是J2E 开发的一站式解决方案;微服务微服务架构风格 ; 服务微化, 将单个的功能模块拆开来。一个应
spring boot orm 推荐 开发工具 java 嵌入式 spring