- 선형 모형(linear model)에서 종속변수 Y는 연속형 이어야 한다. 실제로는 드물지 않게 종속변수 Y가 이산형인 경우가 있고 연속형이지만 비음(nonnegative)인 경우가 있다. 이런 경우들에서는 선형모형이 적절하지 않으므로 대안 모형이 필요한데, 일차적으로 고려할 수 있는 것이 일반화 선형모형(generalized linear model)이다.
- familyType: 종속 변수의 분포에 따른 family 타입. Enum(GAUSSIAN, BINOMIAL, POISSON,GAMMA) (required)
- GAUSSIAN: 종속변수가 정규분포일 경우 사용한다.
- BINOMIAL: 종속변수가 이항분포일 경우 사용한다.
- POISSON: 종속변수가 포아송분포일 경우 사용한다.
- GAMMA: 종속변수가 감마분포일 경우 사용한다.
Family |
Response Type |
supported Links |
GAUSSIAN |
Continuous |
Identity*, Log, Inverse |
BINOMIAL |
Binary |
Logit*, Probit, CLogLog |
POISSON |
Count |
Log*, Identity, Sqrt |
GAMMA |
Continuous |
Inverse*, Idenity, Log |
* Canonical Link
- linkType: 링크 타입. Enum(IDENTITY, LOG,INVERSE, LOGIT, PROBIT, CLOGLOG, SQRT) (required)
- maxIter: GeneralizedLinearRegression을 한번 수행할 때 수행되는 최대 반복 횟수. 최대 시도 횟수 (required)
- 입력 DataFrame의 유효성 검사를 진행한다. (FamilyType, LinkType, Label/Numeric Columns)
- 입력 DataFrame 중 라벨 칼럼을 제외한 나머지 모든 칼럼을 Vectors로 변환하여 features 칼럼으로 만든다.
- Spark ml의 GeneralizedLinearRegression 알고리즘을 사용한다. (가중치를 구한다.)
- 출력 DataFrame을 생성한다.
label |
a1 |
a2 |
a3 |
a4 |
a5 |
88.01632 |
0.636574 |
8.442168 |
2.1161 |
2.771868 |
8.448427 |
138.7549 |
4.595454 |
4.388042 |
4.926094 |
2.682404 |
8.617752 |
38.28387 |
4.292060 |
0.861090 |
9.15798 |
6.607498 |
4.084605 |
82.14778 |
8.559949 |
3.856238 |
1.0381 |
1.687798 |
2.893063 |
33.79002 |
2.272321 |
1.834079 |
6.300621 |
1.937969 |
2.069888 |
7.38867 |
3.956280 |
0.34429 |
4.337371 |
7.56345 |
8.591229 |
191.4533 |
2.220061 |
7.843025 |
6.462687 |
8.731894 |
9.281881 |
15.34906 |
6.105142 |
1.07492 |
1.162823 |
9.241172 |
7.238859 |
97.40528 |
2.691071 |
3.571958 |
7.805966 |
6.843147 |
3.053871 |
111.4974 |
4.262579 |
7.369278 |
0.820671 |
6.687792 |
3.976157 |
203.5744 |
1.363994 |
9.048509 |
8.860461 |
2.572681 |
1.537978 |
140.7668 |
6.226224 |
8.381173 |
0.351448 |
3.638945 |
6.233805 |
259.3807 |
9.811867 |
3.941721 |
5.304835 |
6.661132 |
7.118429 |
attribute |
weight |
a1 |
0.152851 |
a2 |
0.210339 |
a3 |
0.126515 |
a4 |
0.0137 |
a5 |
-1.38E-04 |
val generalizedlinearRegressionInfo =
GeneralizedLinearRegressionInfo.newBuilder()
.setLabelName("label")
.setFamilyType(FamilyType.GAUSSIAN)
.setLinkType(LinkType.LOG)
.setMaxIter(10)
.build
- Generalized Linear Regression은 supervised learning이므로 label이 학습 data로 사용된다.
- 종속 변수의 분포를 고려하여 FamilyType은 gaussian으로 LinkType은 log로 설정하였다.
- 주어진 data들로 학습한 후 각 column(a1~a5)의 weight 값을 얻을 수 있고 원하는 모델을 얻을 수 있다.