2016-07-19 2 views
0

sklearn linear_model을 사용하여 선형 회귀 결과 그래프를 그릴 계획이었고 statsmodels.api를 사용하여 학습 결과의 세부 요약을 얻을 계획이었습니다. 그러나 두 패키지는 동일한 입력에 대해 매우 다른 결과를 생성합니다.통계 모델과 sklearn이 다른 선형 회귀 계수

예를 들어, sklearn의 상수 용어는 7.8e-14이지만 statsmodels의 상수 용어는 48.6입니다. 두 방법 내 코드를 (두 가지 방법을 사용하는 경우 나 일정 기간 동안 X에서의 1 열을 추가)가 간결하다 :

# Use statsmodels linear regression to get a result (summary) for the model. 
def reg_statsmodels(y, x): 
    results = sm.OLS(y, x).fit() 
    return results 

# Use sklearn linear regression to compute the coefficients for the prediction. 
def reg_sklearn(y, x): 
    lr = linear_model.LinearRegression() 
    lr.fit(x, y) 
    return lr.coef_ 

입력 여기서 게시 너무 복잡하다. 단일 입력 x가이 문제를 일으키는 것이 가능한가?

PCA를 사용하여 3 차원 플롯을 만들면 sklearn 결과가 좋은 근사치가 아닌 것으로 보입니다. 몇 가지 설명이 무엇입니까? 저는 여전히 시각화를 만들고 싶기 때문에 sklearn 선형 회귀 구현에서 이슈를 수정하는 것이 매우 도움이 될 것입니다.

답변

1

당신은

I added a column of 1's in x for constant term when using both methods 

그러나 선형 회귀의 documentation

LinearRegression(fit_intercept=True, [...]) 

그것은 기본적으로 차단 맞는 있다고 말한다. 이것은 당신이 상수 기간의 차이점을 갖는 이유를 설명 할 수 있습니다.

다른 계수의 경우 두 변수가 서로 관련성이 높으면 차이가 발생할 수 있습니다. 두 개의 열이 동일한 가장 극단적 인 경우를 생각해 봅시다. 그런 다음 둘 중 하나의 앞에 계수를 줄이는 것은 다른 하나를 증가 시켜서 보상 할 수 있습니다. 이것이 제가 확인해야 할 첫 번째 것입니다.