python逻辑回归(python逻辑回归的主要参数)
本篇文章给大家谈谈python逻辑回归,以及python逻辑回归的主要参数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、怎么看python中逻辑回归输出的解释
- 2、python逻辑回归可以画出列线图吗
- 3、在逻辑回归中,odds ratio怎么用python计算?
- 4、python做逻辑回归 怎么把导入的数据分成x,y
- 5、python逻辑回归怎么求正系数
- 6、淘宝广告用户点击预测(python)
怎么看python中逻辑回归输出的解释
以下为python代码,由于锋指训练数据比较少,这边使用了批处理梯度下降法,没有使用增量梯度下降银和配法。
##author:lijiayan##data:2016/10/27
##name:logReg.pyfrom numpy import *import matplotlib.pyplot as pltdef loadData(filename):
data = loadtxt(filename)
m,n = data.shape print 'the number of examples:',m print 'the number of features:',n-1 x = data[:,0:n-1]
y = data[:,n-1:n] return x,y#the sigmoid functiondef sigmoid(z): return 1.0 / (1 + exp(-z))#the cost functiondef costfunction(y,h):
y = array(y)
h = array(h)
J = sum(y*log(h))+sum((1-y)*log(1-h)) return J# the batch gradient descent algrithmdef gradescent(x,y):
m,n = shape(x) #m: number of training example; n: number of features x = c_[ones(m),x] #add x0 x = mat(x) # to matrix y = mat(y)
a = 0.0000025 # learning rate maxcycle = 4000 theta = zeros((n+1,1)) #initial theta J = [] 棚友for i in range(maxcycle):
h = sigmoid(x*theta)
theta = theta + a * (x.T)*(y-h)
cost = costfunction(y,h)
J.append(cost)
plt.plot(J)
plt.show() return theta,cost#the stochastic gradient descent (m should be large,if you want the result is good)def stocGraddescent(x,y):
m,n = shape(x) #m: number of training example; n: number of features x = c_[ones(m),x] #add x0 x = mat(x) # to matrix y = mat(y)
a = 0.01 # learning rate theta = ones((n+1,1)) #initial theta J = [] for i in range(m):
h = sigmoid(x[i]*theta)
theta = theta + a * x[i].transpose()*(y[i]-h)
cost = costfunction(y,h)
J.append(cost)
plt.plot(J)
plt.show() return theta,cost#plot the decision boundarydef plotbestfit(x,y,theta):
plt.plot(x[:,0:1][where(y==1)],x[:,1:2][where(y==1)],'ro')
plt.plot(x[:,0:1][where(y!=1)],x[:,1:2][where(y!=1)],'bx')
x1= arange(-4,4,0.1)
x2 =(-float(theta[0])-float(theta[1])*x1) /float(theta[2])
plt.plot(x1,x2)
plt.xlabel('x1')
plt.ylabel(('x2'))
plt.show()def classifyVector(inX,theta):
prob = sigmoid((inX*theta).sum(1)) return where(prob = 0.5, 1, 0)def accuracy(x, y, theta):
m = shape(y)[0]
x = c_[ones(m),x]
y_p = classifyVector(x,theta)
accuracy = sum(y_p==y)/float(m) return accuracy
调用上面代码:
from logReg import *
x,y = loadData("horseColicTraining.txt")
theta,cost = gradescent(x,y)print 'J:',cost
ac_train = accuracy(x, y, theta)print 'accuracy of the training examples:', ac_train
x_test,y_test = loadData('horseColicTest.txt')
ac_test = accuracy(x_test, y_test, theta)print 'accuracy of the test examples:', ac_test
学习速率=0.0000025,迭代次数=4000时的结果:
似然函数走势(J = sum(y*log(h))+sum((1-y)*log(1-h))),似然函数是求最大值,一般是要稳定了才算最好。
下图为计算结果,可以看到训练集的准确率为73%,测试集的准确率为78%。
这个时候,我去看了一下数据集,发现没个特征的数量级不一致,于是我想到要进行归一化处理:
归一化处理句修改列loadData(filename)函数:
def loadData(filename):
data = loadtxt(filename)
m,n = data.shape print 'the number of examples:',m print 'the number of features:',n-1 x = data[:,0:n-1]
max = x.max(0)
min = x.min(0)
x = (x - min)/((max-min)*1.0) #scaling y = data[:,n-1:n] return x,y
在没有归一化的时候,我的学习速率取了0.0000025(加大就会震荡,因为有些特征的值很大,学习速率取的稍大,波动就很大),由于学习速率小,迭代了4000次也没有完全稳定。现在当把特征归一化后(所有特征的值都在0~1之间),这样学习速率可以加大,迭代次数就可以大大减少,以下是学习速率=0.005,迭代次数=500的结果:
此时的训练集的准确率为72%,测试集的准确率为73%
从上面这个例子,我们可以看到对特征进行归一化操作的重要性。
python逻辑回归可以画出列线图吗
是的,python逻辑回归可以画出列氏神世线图。列线图是一种用来表示目标变量与自变量之间关系的歼肢可视化图表。可以使用python的matplotlib库来绘制列线图,以更好地理解模型的结果。瞎改
[img]在逻辑回归中,odds ratio怎么用python计算?
实际上完成逻辑回归是相当简单的,首先指定要预测变量的列,接着指定模型用于做预测的列,剩下的就由算法包去完成了。
本例中要预测的是admin列,使用到gre、gpa和虚拟变量prestige_2、prestige_3、prestige_4。prestige_1作为基准,所以排除掉,以没咐防止多元共线性(multicollinearity)和引入前蚂分类变量的所有虚拟变量慧察埋值所导致的陷阱(dummy variable trap)。
程序缩进如图所示
python做逻辑回归 怎么把导入的数据分成x,y
简介
本例子是通过对一组逻辑回归映射芹轮进行输出,使得网络的权重和偏置达到最理想状态,最后再进行预测。其中,使用GD算法对参数进行更新,损耗函数采取交叉商来表示,一共训练10000次。
2.python代码
#!/usr/bin/python
import numpy
import theano
import theano.tensor as T
rng=numpy.random
N=400
feats=784
# D[0]:generate rand numbers of size N,element between (0,1)
# D[1]:generate rand int number of size N,0 or 1
D=(rng.randn(N,feats),rng.randint(size=N,low=0,high=2))
training_steps=10000
# declare symbolic variables
x=T.matrix('x')
y=T.vector('y')
w=theano.shared(rng.randn(feats),name='w') # w is shared for every input
b=theano.shared(0.,name='b') # b is shared too.
print('Initial model:')
print(w.get_value())
print(b.get_value())
# construct theano expressions,symbolic
p_1=1/(1+T.exp(-T.dot(x,w)-b)) # sigmoid function,probability of target being 1
prediction=p_10.5
xent=-y*T.log(p_1)-(1-y)*T.log(1-p_1) # cross entropy
cost=xent.mean()+0.01*(w**2).sum() # cost function to update parameters
gw,gb=T.grad(cost,[w,b]) # stochastic gradient descending algorithm
#compile
train=theano.function(inputs=[x,y],outputs=[prediction,xent],updates=((w,w-0.1*gw),(b,b-0.1*gb)))
predict=theano.function(inputs=[x],outputs=prediction)
# train
for i in range(training_steps):
pred,err=train(D[0],D[1])
print('Final model:')
print(w.get_value())
print(b.get_value())
print('target values for D:')
print(D[1])
print('prediction on D:')
print(predict(D[0]))
print('newly generated data for test:')
test_input=rng.randn(30,feats)
print('result:')
print(predict(test_input))
3.程序解读
如上面所示,首先导入所需的库,theano是一个用于科学计算的库。然后这里我们随机产生一个输入矩阵,大小为400*784的随机数,随机产生一个输出向量大小为400,输出向量为二值的。因此,称为逻辑回归。
然后初始化权重和偏置,它们均为共享变量(shared),其中权重初始化为较小的数,偏置初始化为0,并且打印它们。
这里我们只构建一层网络结构,使用的激活函数为logistic sigmoid function,对输入量乘以权重并考虑偏置以后就可以算出输入的激活值,该值嫌链信在(0,1)之间,以0.5为界限进行二值化,然后算出唤亮交叉商和损耗函数,其中交叉商是代表了我们的激活值与实际理论值的偏离程度。接着我们使用cost分别对w,b进行求解偏导,以上均为符号表达式运算。
接着我们使用theano.function进行编译优化,提高计算效率。得到train函数和predict函数,分别进行训练和预测。
接着,我们对数据进行10000次的训练,每次训练都会按照GD算法进行更新参数,最后我们得到了想要的模型,产生一组新的输入,即可进行预测。
python逻辑回归怎么求正系数
Python 逻辑回归求正系数的方法可以分为两种:
1. 使用线性模型的求解方简陵法:可以使用sklearn中的LogisticRegression类来求解正系数,模如调用其中的fit()方法就可以求解出正系数。
2. 使用梯度下降法:可以自己实现梯度下降法,通过不断迭代更新正拦码戚系数,最终获得最优的正系数。
淘宝广告用户点击预测(python)
为提高用户淘宝广告点击率,通过分析淘宝用户广告点击记录及对应的用户信息和广告信息表,用python 进行数据合并后进行数据清洗、提取数据特征,做特征工程分析,分析影响用户点击广携岁告的因素,建立简单逻辑回归模型,预测用户是否点击广告;
数据集简介(详情见数据集链接):
数据集一共4个表,因为昌数是广告点击预测,就用了前面三个表,表描述如下:
主表:raw_sample
以clk 作为后逻辑回归模型数据集标签,后面会改名称为flag;
数据清洗:
以user id+ time_stamp查看,会有很多重复的记录。删除重复时间+用户ID,设置唯一标耐隐首识;
查看目前数据集大小:
查看空值:
查看点击占比:
ad_feature
数据清洗:
查看重复值:
和主表做关联生成date1:
查看合并后的空值:
查看点击占比:
user_profile
查看重复值:
和date1做关联生成date2:
最终数据表信息:
查看点击比例:
删除不需要做分析的ID标识符字段:
最终数据表点击比例:
类别字段:男女占比/学生占比
时间字段:
数据集只有时间戳字段,我们从中提取星期数以及对应时间段来看时间趋势;
查看点击趋势:
对星期数再区分以便后面做特征提取;
同样对小时进行分组方便后面的特征处理
连续型字段处理:
price:
查看广告价格描述性统计信息:
给广告价格分区:
时间字段可以删除:
查看目前缺失数据,需要填充缺失数据:
查看缺失占比,pvalue_level缺失的比较多,用一个特殊的数字填充,这里用的9999.0
空值填充:如果是数值类型,用平均值取代;如果是分类数据,用最常见的类别取代;
查看剩余连续数据的分布和描述性统计信息:
删除分完区的原始列:
把sex标准化变成0/1:
目前数据预览:
Age_leavel/wechat_group 分类太多,后面做特征编码的时候生成的特征太多,对它进行分区:
数据集重命名备份:
对前面提取的特征用使用get_dummies进行one-hot编码(类似的做法,就贴三个)
分类列stu我们编码后保留一个特征:
相关系数法:计算各个特征的相关系数
查看各个特征与点击情况(flag)的相关系数,ascending=False表示按降序排列:
截取了相关系数前后几个,都不高,用户本身广告点击率就很低;
广告价格、资源位、性别、商品类别、周五比较能影响用户点击;
根据各个特征与flag的相关系数大小,选择了这几个特征作为模型的输入:
建立训练数据集和测试数据集:
建立逻辑回归并计算逻辑正确率:
关于python逻辑回归和python逻辑回归的主要参数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。