1

3 つの [1, m] numpy 行列の等高線図を作成しようとしてハングアップしています。プロットしようとすると:

plt.contour(reg.theta[0,:], reg.theta[1,:], reg.J[0,:])

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

という事実と関係があると思います。

In[167]: shape(reg.theta[0,:])

Out[167]: (1, 15000)

そして輪郭は次の線に沿って何かを望んでいます(15000,)

私は matlab で使用する方法と同様のメッシュグリッドを作成しようとしました

X , Y = meshgrid(reg.theta[0,:], reg.theta[1,:]

ValueError: total size of new array must be unchanged[1,:])

とはいえ、これをどう解釈していいのかわからない。

スタックオーバーフローにアドバイスしてください!

これがPython 2.7でテストされた私の完全なコードです

from numpy import *
import matplotlib.pyplot as plt
class LinearRegression: 

    def __init__(self, data):

        self.data_loc = data
        self.max_it = 15000
        self.theta = matrix(ones((2, self.max_it)))
        self.alpha = .01
        self.J = matrix(zeros((1, self.max_it)))


    def importData(self):

        Data = loadtxt(self.data_loc, delimiter = ',')
        rawData = matrix(Data)
        x = rawData[:,0]
        y = rawData[:,1]
        [m,n] = shape(x)
        x_0 = matrix(ones((m,1)))
        x = concatenate((x_0, x), axis = 1)

        return x, y, m, n

    def center(self, x):

        x = x / mean(x)

        return x 

    def scale(self, x):

        x = x/ std(x)

        return x 

    def funct(self, m, b):

        return lambda x: m*x + b 


    def cost(self, x, y, m, mx, b):

        f = self.funct(mx, b)
        err = power( (f(x) - y), 2).sum()
        err = err / (2*len(x))

        return err

    def gradientDesc(self, x, y, m):

        for i in range(0, self.max_it -1):

            error = (1.0/m) * transpose(x) * ((x * self.theta[:,i]) - y ) 
            delta = self.theta[:,i] - self.alpha*error

            self.J[0,i] = (self.cost( x, y, m, self.theta[1,i], self.theta[0,i]))

            self.theta[:, i+1] = delta

        print('Calculation Complete')
        return self.theta, error


reg = LinearRegression('/users/michael/documents/machine_learning/ex1/ex1data1.txt')
x, y, m ,n = reg.importData()
theta, error = reg.gradientDesc(x,y,m)
print (reg.theta[:,reg.max_it -1])
XX = linspace(0,m,m)
J = reg.theta[0,reg.max_it-1] + reg.theta[1, reg.max_it-1] * XX 
plt.plot(XX, J)
plt.scatter(x[:,1],y)`
4

0 に答える 0