机器学习,计算成本函数误差,得到大小为0的矩阵作为结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习,计算成本函数误差,得到大小为0的矩阵作为结果相关的知识,希望对你有一定的参考价值。

import numpy as np
from matplotlib import pyplot as plot

def sigmoid(x):
    return 1.0/(1+np.asmatrix(np.exp(-x)))

def graD(X,y,alpha,s0,numda):
    m=np.size(X,0)
    n=np.size(X,1)
    X0=X[:,0]
    X1=X[:,1:]

    theta=np.asmatrix(np.zeros(np.size(X,1))).T
    s=100
    lit=0
    Jlist=[]

    while abs(s)>s0 and lit<=10000:
        theta0=theta[0]
        theta1=theta[1:]


        theta0-=(float(alpha)/m)*X0.T*(sigmoid(X*theta)-y)
        theta1-=float(alpha)*((1.0/m)*X1.T*(sigmoid(X*theta)-y)+float(numda)/m*theta1)
        theta=np.vstack((np.asmatrix(theta0),np.asmatrix(theta1)))

        Jlist.append( cost(X,y,theta,numda) )

        lit+=1
        s=sum((float(1.0)/m)*X.T*(sigmoid(X*theta)-y))/float(n)

    plot.scatter( range(0, len(Jlist)), Jlist )

    return theta


def cost(X,y,theta,numda):
    m=X.shape[0]

    J = (-1.0/m)*( (-y).T*np.log( sigmoid(X*theta) ) - (1-y).T*np.log(1- sigmoid(X*theta) )  ) + (numda/ (m*2)) * (theta[0,1:].T * theta[0,1:]  )
    return J

我打印出了函数成本的结果,它计算了逻辑回归的成本函数,但我发现它是一个长度为0的[]

另外,我分别尝试使用:

c(X,y,theta,30)
Out[69]: matrix([], shape=(0, 0), dtype=float64)

而且问题也存在,我是ml和python的新手,我真的无法解决这个问题

答案

我想你想做的是:

def cost(X,y,theta,numda):
    m=X.shape[0]

    J = (-1.0/m)*(np.dot(-y.T, np.log(sigmoid(np.dot(X,theta)))) - np.dot(1-y.T, np.log(1-sigmoid(np.dot(X, theta))))) + (numda/(m*2)) * (np.linalg.norm(theta[1:])**2)
    return J

在numpy中,*是元素方面的产品,而np.dot()是矩阵产品。我认为这是你的主要困惑。

以上是关于机器学习,计算成本函数误差,得到大小为0的矩阵作为结果的主要内容,如果未能解决你的问题,请参考以下文章

《机器学习基石》---线性回归

机器学习-Logisitic回归

机器学习基石:09 Linear Regression

2机器学习实现 Rosenblatt 感知器

机器学习——梯度下降法

机器学习笔记线性回归