关于python计算似然函数的信息

怎么看python中逻辑回归输出的解释以下为python代码,由于训练数据比较少 , 这边使用了批处理梯度下降法,没有使用增量梯度下降法 。
##author:lijiayan##data:2016/10/27
##name:logReg.pyfrom numpy import *import matplotlib.pyplot as pltdef loadData(filename):
data = https://www.04ip.com/post/loadtxt(filename)
m,n = data.shapeprint 'the number ofexamples:',mprint 'the number of features:',n-1x = data[:,0:n-1]
y = data[:,n-1:n]return x,y#the sigmoid functiondef sigmoid(z):return 1.0 / (1exp(-z))#the cost functiondef costfunction(y,h):
y = array(y)
【关于python计算似然函数的信息】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 featuresx = c_[ones(m),x]#add x0x = mat(x)# to matrixy = mat(y)
a = 0.0000025# learning ratemaxcycle = 4000theta = zeros((n 1,1))#initial thetaJ = []for i in range(maxcycle):
h = sigmoid(x*theta)
theta = thetaa * (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 featuresx = c_[ones(m),x]#add x0x = mat(x)# to matrixy = mat(y)
a = 0.01# learning ratetheta = ones((n 1,1))#initial thetaJ = []for i in range(m):
h = sigmoid(x[i]*theta)
theta = thetaa * 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 = https://www.04ip.com/post/loadtxt(filename)
m,n = data.shapeprint 'the number ofexamples:',mprint 'the number of features:',n-1x = data[:,0:n-1]
max = x.max(0)
min = x.min(0)
x = (x - min)/((max-min)*1.0)#scalingy = data[:,n-1:n]return x,y
在没有归一化的时候 , 我的学习速率取了0.0000025(加大就会震荡,因为有些特征的值很大 , 学习速率取的稍大,波动就很大),由于学习速率小,迭代了4000次也没有完全稳定 。现在当把特征归一化后(所有特征的值都在0~1之间),这样学习速率可以加大,迭代次数就可以大大减少,以下是学习速率=0.005,迭代次数=500的结果:
此时的训练集的准确率为72%,测试集的准确率为73%
从上面这个例子,我们可以看到对特征进行归一化操作的重要性 。
python中是否有用于计算两个字符串相似度的函数linux环境下,没有首先安装python_Levenshtein,用法如下:
重点介绍几个该包中的几个计算字串相似度的几个函数实现 。
1. Levenshtein.hamming(str1, str2)
计算汉明距离 。要求str1和str2必须长度一致 。是描述两个等长字串之间对应位置上不同字符的个数 。如
2. Levenshtein.distance(str1, str2)
计算编辑距离(也成Levenshtein距离) 。是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换 。如
算法实现 参考动态规划整理: 。
3. Levenshtein.ratio(str1, str2)
计算莱文斯坦比 。计算公式r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的长度总和,ldist是类编辑距离
注意:这里的类编辑距离不是2中所说的编辑距离,2中三种操作中每个操作 1,而在此处 , 删除、插入依然 1,但是替换 2
这样设计的目的:ratio('a', 'c'),sum=2,按2中计算为(2-1)/2 = 0.5,’a','c'没有重合,显然不合算,但是替换操作 2,就可以解决这个问题 。
4. Levenshtein.jaro(s1, s2)
计算jaro距离,
其中的m为s1, s2的匹配长度,当某位置的认为匹配 当该位置字符相同,或者在不超过
t是调换次数的一半
5. Levenshtein.jaro_winkler(s1, s2)
计算Jaro–Winkler距离
最大似然估计(MLE)原理及计算方法1)有两堆球,其中A堆有99个白球和1个黑球,B堆有99个黑球和1个白球 。假如随便摸一个球,发现是黑球,那么这个球更有可能来自于哪一堆?
2)猎人和徒弟去打猎,打倒了一只兔子,更可能是谁打中的?
3)一堆球,里边有黑白两色的球,其中一种颜色的有90个,另一种颜色的有10个 。如果摸出一个球是黑色的,那么里边哪种颜色有90个?
第一个肯定觉得是来自B堆,第二个中更可能是师傅,第三个里边黑球有90个 。我们的估计基于,概率最高的事情,更可能发生 。一次实验就出现的事件 , 这件事有较大的概率发生 。
最大似然估计这个名字是由高斯先提出,Fisher后来重新提出并证明了一些特征 。这是统计学中的常用方法,机器学习中的逻辑回归中也是基于它计算的损失函数 。
当样本分布是离散型:
当样本分布为连续型时:
一般情况下求估计值的步骤:
1)构造似然函数??(??)
2)取对数:??????(??)似然函数是连乘,不好求导;取对数后可化为加法,求导方便 。
3)求导,计算极值
4)解方程,得到??
如果似然方程无解,或者似然函数不可导,则需要考虑其他方法 。
(此题来自于)
参考:
1)
2)
欢迎关注!
python计算似然函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、python计算似然函数的信息别忘了在本站进行查找喔 。

    推荐阅读