generalizedLinearRegression¶
개요¶
Linaer Regression에서 각각의 column에 대한 중요도를 뽑아내지 못 하여 해당 알고리즘을 추가 했습니다.
설명¶
비 정규 분포를 따르는 응답에 적용하기 위해 일반화 선형 모델(generalized linear regression)을 사용합니다. family 분포도는 사용자가 스스로 결정해야합니다.
Examples¶
집값에 대한 샘플데이터 입니다.
indus | rm | dis | tax | lstat | medv |
---|---|---|---|---|---|
2.309999943 | 6.574999809 | 4.090000153 | 296 | 4.980000019 | 24 |
7.070000172 | 6.421000004 | 4.967100143 | 242 | 9.140000343 | 21.60000038 |
7.070000172 | 7.184999943 | 4.967100143 | 242 | 4.03000021 | 34.70000076 |
2.180000067 | 6.998000145 | 6.062200069 | 222 | 2.940000057 | 33.40000153 |
… | … | … | … | … | … |
속성 | 설명 |
---|---|
CRIM | 마을별 범죄율 |
ZN | 주거지의 비율 |
INDUS | 공업 지의 비율 |
CHAS | 강변 위치 여부 |
NOX | 대기 중 질소 산화물 농도 |
RM | 가구당 방의 개수 |
AGE | 1940년 전에 지어진 집의 비율 |
DIS | 일터와의 평균 거리 |
RAD | 고속도로 접근성 |
TAX | 재산세율 |
PTRATIO | 마을 별 학생-교사 비율 |
B | 흑인 주거 비율 |
LSTAT | 저소득층 주거 비율 |
MEDV | 집값 중간값 |
fit으로 generalized linear regression 적용해 분류 하는 모델을 생성하는 명령어 예제입니다.
* | fit GeneralizedLinearRegression FEATURES rm,tax,indus,lstat,dis LABEL medv maxIter=100 regParam=0.1 fitIntercept=True solver=irls INTO modelB
features | estimate | coefficientStandardErrors | tValues | pValues | space | dispersion | rmse | r2 | mae |
---|---|---|---|---|---|---|---|---|---|
intercept | 8.3766 | 3.431 | 2.4415 | 0.015 | 28.2425 | 5.2828 | 0.6694 | 3.7289 | |
rm | 4.7425 | 0.432 | 10.9786 | 0 | None | None | None | None | |
tax | -0.0078 | 0.002 | -3.8132 | 0.0002 | None | None | None | None | |
indus | -0.1239 | 0.0612 | -2.0267 | 0.0432 | None | None | None | None | |
lstat | -0.6136 | 0.0499 | -12.29 | 0 | None | None | None | None | |
dis | -0.8767 | 0.161 | -5.4454 | 0 | None | None | None | None |
predict로 modelB에 샘플 데이터를 다시 넣어 예측하는 명령어 예제입니다.
* | predict modelB rm,tax,indus,lstat,dis
fit_predict로 generalized linear regression 적용해 분류 하는 모델을 생성하고 예측하는 명령어 예제입니다.
* | fit_predict GeneralizedLinearRegression FEATURES rm,tax,indus,lstat,dis LABEL medv maxIter=100 regParam=0.1 fitIntercept=True solver=irls INTO modelB
indus | rm | dis | tax | lstat | medv | prediction |
---|---|---|---|---|---|---|
2.309999943 | 6.574999809 | 4.090000153 | 296 | 4.980000019 | 24 | 30.327170453 |
7.070000172 | 6.421000004 | 4.967100143 | 242 | 9.140000343 | 21.60000038 | 26.105575673 |
7.070000172 | 7.184999943 | 4.967100143 | 242 | 4.03000021 | 34.70000076 | 32.864401681 |
2.180000067 | 6.998000145 | 6.062200069 | 222 | 2.940000057 | 33.40000153 | 34.881037647 |
… | … | … | … | … | … | … |
Parameters¶
SparkGeneralizedLinearRegression_command : FEATURES fields LABEL l_field params INTO_model
이름 | 설명 | 필수/옵션 |
---|---|---|
FEATURES fields | 학습에 사용될 특징 column을 입력 받습니다. | 필수 |
LABEL l_fiedls | 학습에 사용될 라벨 column을 입력 받습니다. | 필수 |
params | *알고리즘 옵션을 지정해줍니다. | 필수 |
INTO_model | 모델을 저장해주는 예약어 입니다. 경로 (/B-IRIS/USERS/dani/ML/)에 모델, 모델 메타 데이터가 저장됩니다. 예 : into modelA |
옵션 |
*알고리즘 옵션
이름 | 설명 | 기본값 |
---|---|---|
maxIter | 학습 반복 수 | 100 |
regParam | 정규화 계수 값 | 0.0 |
fitintercept | 훈련 데이터에 대한 증간된 표현을 사용할지 안 할지 정해주는 Boolean (편향을 학습에 사용할지 안 할지) | True |
tol | 최적화 함수에 대한 반복 수렴 오차 값. | 1e-06 |
solver | 최적화 알고리즘을 정합니다. | irls |
family | 모델에 사용되는 오류 분포 (gaussian, binomial, poisson, gamma and tweedie) | gaussian |
link | 선형적인 예측과 분포 함수의 평균사이의 관계를 제공해주는 함수 (identity, log, inverse, logic, probit, cloglog, sort) | identity |
Parameters BNF¶
SparkGeneralizedLinearRegression_command : FEATURES fields LABEL l_field params INTO_model
fields : field
| fields COMMA field
field : WORD
| TIMES
| MINUS WORD
l_field : WORD
params : param
| params param
|
param : WORD EQUALS WORD
| WORD EQUALS DOUBLE
| WORD EQUALS LBRACKET words RBRACKET
| WORD EQUALS LBRACKET doubles RBRACKET
words : WORD
| words COMMA WORD
doubles : DOUBLE
| doubles COMMA DOUBLE
INTO_model : INTO WORD
|
WORD = \w+
COMMA = \,
FEATURES = FEATURES | features
LABEL = LABEL | label
INTO = INTO
EQUALS = \=
TIMES = \*
MINUS = -
LBRACKET = \[
RBRACKET = \]
DOUBLE = [-+]?[0-9]+(\.([0-9]+)?([eE][-+]?[0-9]+)?|[eE][-+]?[0-9]+)
Problems¶
구현 문제인지, 다른 문제인지 확인 불가
File"/Users/jungjunhwang/Desktop/work/code/fit_work/SparkGenerlizedLinearRegression.py", line 245, in modeling eval_dict['pValues'] = summary.pValues File "/Users/jungjunhwang/spark-2.2.0-bin hadoop2.7/python/pyspark/ml/regression.py", line 1719, in pValues return self._call_java("pValues") IllegalArgumentException: u'requirement failed: degreesOfFreedom must be positive, but got -4.0'
로컬 테스트시 column의 갯수 혹은 column들의 관계에 따라 pValue 값을 계산하지 못함.
Data-Discovery-Service 서버 테스트 시 정상작동 그러나, 값이 정확한지 확인 불가.
<angora Test Command> ... | fit SparkGeneralizedLinearRegression features * LABEL medv maxIter=100 INTO modelD
값이 정확한지 확인 불가.
<angora Test Command> ... | fit SparkGeneralizedLinearRegression FEATURES rm,tax,indus,lstat,crim,age,b,rad LABEL medv maxIter=100 regParam=0.1 fitIntercept=True INTO modelD
Data-Discovery-Service_TEST
Coeffiecient | estimate | standError | tValues | pValues |
---|---|---|---|---|
intercept | -3.3659 | 0.4538 | 11.2661 | 0.0 |
rm | 5.1128 | 0.0041 | -3.5127 | 0.0005 |
tax | -0.0144 | 0.0604 | 0.7848 | 0.433 |
indus | 0.0474 | 0.057 | -9.8506 | 0.0 |
lstat | -0.5619 | 0.0368 | -1.9531 | 0.0514 |
crim | -0.0719 | 0.0123 | 1.3831 | 0.1673 |
age | 0.017 | 0.003 | 3.1231 | 0.0019 |
b | 0.0094 | 0.0717 | 2.8293 | 0.0049 |
rad | 0.2028 | 3.6905 | -0.9121 | 0.3622 |