此代码旨在通过定义一个我们自己编译的函数“standRegres”来计算线性回归。虽然我们可以通过sklearn或statsmodels中的函数来做lm,但这里我们只是尝试自己构造函数。但不幸的是,我面对错误并且无法克服它。所以,我在这里请求你的帮助。
整个代码运行没有任何问题,直到最后一行。如果我运行最后一行,则会出现一条错误消息:“ValueError: ndarray is not contiguous”。
import os
import pandas as pd
import numpy as np
import pylab as pl
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
# load data
iris = load_iris()
# Define a DataFrame
df = pd.DataFrame(iris.data, columns = iris.feature_names)
# take a look
df.head()
#len(df)
# rename the column name
df.columns = ['sepal_length','sepal_width','petal_length','petal_width']
X = df[['petal_length']]
y = df['petal_width']
from numpy import *
#########################
# Define function to do matrix calculation
def standRegres(xArr,yArr):
xMat = mat(xArr); yMat = mat(yArr).T
xTx = xMat.T * xMat
if linalg.det(xTx) == 0.0:
print ("this matrix is singular, cannot do inverse!")
return NA
else :
ws = xTx.I * (xMat.T * yMat)
return ws
# test
x0 = np.ones((150,1))
x0 = pd.DataFrame(x0)
X0 = pd.concat([x0,X],axis = 1)
# test
standRegres(X0,y)
此代码在最后一行之前运行没有任何问题。如果我运行最后一行,则会出现一条错误消息:“ValueError: ndarray is not contiguous”。
我干了解决它,但不知道如何。你可以帮帮我吗?非常感谢!