1

이 코드는 직접 컴파일하여 "standRegres"함수를 정의하여 선형 회귀를 계산하도록 설계되었습니다. 우리가 sklearn이나 stats 모델의 함수로이 작업을 할 수는 있지만, 여기서 우리는 우리 스스로 해결할 수 있습니다. 그러나 불행히도, 나는 오류에 직면하고 그것을 정복 할 수 없다. 그래서, 당신을 도울 것을 부탁드립니다.Python 3 : 회귀 함수를 구성 할 때 "ndarray가 연속적이지 않음"을 만족했습니다.

전체 코드는 마지막 행까지 아무런 문제없이 실행됩니다. 마지막 행을 실행하면 "ValueError : ndarray가 연속적이지 않습니다"라는 오류 메시지가 나타납니다.

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가 연속적이지 않습니다"라는 오류 메시지가 나타납니다.

나는 그것을 풀기는 어렵지만 어떻게해야할지 모르겠다. 당신이 나를 도울 수? 그 점에 대해 대단히 감사드립니다!

+0

"C 연속"이라고 말하거나 "포트란 인접"이라고 말합니까? –

+0

@aryamccarthy "연속적이지 않다"고 말하는 것입니다. 왜 C 또는 포트란인지 밝히지 않았다. 그리고 나는 또한 어떤 사람들이 stackoverflow에서 "C가 연속적이 아니다"라는 문제를 만났을 때 질문을하는 것을 본다. –

답변

0

이 문제는 mat 기능 사용으로 발생합니다. 스틱을 array에 붙여주십시오.

array을 사용하려면 *이 아닌 행렬 곱셈에 @ 부호를 사용해야합니다. 마지막으로 xTx.I이라는 줄이 있지만이 함수는 일반 배열에 정의되어 있지 않으므로 numpy.linalg.inv을 사용할 수 있습니다.

def standRegres(xArr,yArr): 
    xMat = array(xArr); yMat = array(yArr).T 
    xTx = xMat.T @ xMat 
    if linalg.det(xTx) == 0.0: 
     print ("this matrix is singular, cannot do inverse!") 
     return NA 
    else : 
     ws = linalg.inv(xTx) @ (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) 
# Output: array([-0.36651405, 0.41641913]) 
+0

좋습니다! 정말 고맙습니다. 나는 @, 배열과 numpy.linalg.inv를 어떻게 사용하는지 알기 시작했다. 그리고 미안 해요 내 명성이 15보다 낮기 때문에 답장을 못하게 할 권리가 없지만 당신의 도움에 감사드립니다. 그리고, 제가 회귀의 결과를 "매트릭스 ([- 0.36651405], [0.41641913]])와 같은 매트릭스로 만들고 싶다면 어떻게해야합니까? 고맙습니다. –

+0

죄송합니다, 내가 upvote 때, 그것은 "15 명 미만의 명성을 가진 사람들에 의한 투표 기록이지만 공개 된 게시물 점수를 변경하지 마십시오" –

+0

걱정하지 마십시오. 내 평판은 이제 8입니다. 질문을 한 개 더하고 대답을 하나 더 받으면 투표 할 수 있습니다. 나는 당신의 대답을 되돌리고 upvote하겠다고 약속한다. 정말 고맙습니다! –