• 검색 결과가 없습니다.

선형 모델

N/A
N/A
Protected

Academic year: 2022

Share "선형 모델"

Copied!
43
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Topic.03

선형 모델

(2)

선형 회귀

(3)

학습 목표

 wave 데이터 세트를 이용하여 회귀분석하는 예제를 살펴본다.

 wave 데이터 세트를 이용하여 선형회귀(최소제곱법) 를 수행한다.

 선형회귀(최소제곱법)의 장단점을 알아본다.

(4)

회귀용 선형 모델

 일반화된 선형 예측 함수

, , …, : 특성 (특성의 개수 = ) , , …, , : 모델이 학습할 매개변수 : 모델이 만들어낸 예측값

 특성이 1개인 선형 예측 함수 (= 2차원 직선의 방정식)

(5)

wave

5

feature target

-2.46904499 -1.54756059

-2.55269614 -0.79263824

-2.55573209 -0.80370608

-2.41396732 0.13915737

-2.60969044 -0.75159805

-2.6186499 -0.54738091

-2.35265144 -0.76981996

-2.65149833 -0.124268

-2.30478564 -1.61166313

-2.28243452 -0.87557618

-2.72129752 -0.66166641

-2.72863627 -1.32567079

-2.26777059 -1.32442468

-2.79366887 -0.33342093

-2.16303684 -1.30000147

-2.15445465 -2.2420626

-2.84748524 -0.82377718

… …

(6)

선형 회귀: wave (예)

import matplotlib.pyplot import mglearn

mglearn.plots.plot_linear_regression_wave()

matplotlib.pyplot.show()

(7)

선형 회귀: wave (예)

7

(8)

학습 목표

 wave 데이터 세트를 이용하여 회귀분석하는 예제를 살펴본다.

 wave 데이터 세트를 이용하여 선형회귀(최소제곱법) 를 수행한다.

 선형회귀(최소제곱법)의 장단점을 알아본다.

(9)

선형 회귀 (최소제곱법)

9

 Linear regression, OLS (ordinary least square)

 가장 간단하고 오래된 회귀용 선형 알고리즘

 예측값과 훈련 세트의 타겟 y값 사이의 평균제곱오차 (mean squared error) 를 최소화하는 파라미터 와 를 찾음

평균제곱오차: 예측값과 타겟값의 차이를 제곱하여 더한 후 샘플의 개수로 나눈 값

 sklearn.linear_model.LinearRegression()

(10)

wave

feature target

-2.46904499 -1.54756059

-2.55269614 -0.79263824

-2.55573209 -0.80370608

-2.41396732 0.13915737

-2.60969044 -0.75159805

-2.6186499 -0.54738091

-2.35265144 -0.76981996

-2.65149833 -0.124268

-2.30478564 -1.61166313

-2.28243452 -0.87557618

-2.72129752 -0.66166641

-2.72863627 -1.32567079

-2.26777059 -1.32442468

-2.79366887 -0.33342093

-2.16303684 -1.30000147

-2.15445465 -2.2420626

-2.84748524 -0.82377718

(11)

선형 회귀 (최소제곱법): wave

11

import sklearn.model_selection import sklearn.linear_model import mglearn.datasets

X, y = mglearn.datasets.make_wave(n_samples=60)

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=42) reg = sklearn.linear_model.LinearRegression()

reg.fit(X_train, y_train)

print("Train - answer : {}".format(y_train))

print("Train - predicted: {}".format(reg.predict(X_train)))

print("Train - accuracy : {:.2f}".format(reg.score(X_train, y_train))) print()

print("Test - answer : {}".format(y_test))

print("Test - predicted: {}".format(reg.predict(X_test)))

print("Test - accuracy : {:.2f}".format(reg.score(X_test, y_test))) print()

print("reg.coef_: {}".format(reg.coef_))

print("reg.intercept_: {}".format(reg.intercept_))

(12)

선형 회귀 (최소제곱법): wave

Train - answer : [ 0.26134393 0.29262945 -0.70117304 -1.7113156 - 1.32035898 1.19812891

-0.74646948 0.95081838 -1.03731593 0.79900059 -1.7240941 -0.94575843 0.97923163 0.44971554 -0.72142625 -1.11948406 -0.32691082 -

0.38575444

0.82614241 1.39515571 -0.83684971 1.28948157 -0.32309571 -0.9139074 -0.08137001 -0.75150632 0.50015912 -0.75240909 0.13772889 0.77613985 -0.93416482 0.38109799 0.13368988 -1.58831973 -0.48647165 -

0.17851354

-1.25635546 -0.49131681 0.96250584 1.20319981 -0.44713127 - 1.27708305

0.65823236 0.25092544 0.81263817]

Train - predicted: [ 0.02670583 0.20717424 -1.07624425 -0.92509177 - 0.84478135 0.93559713

-0.52522035 1.06868591 -1.10662932 0.64219002 -1.00437487 - 0.78005667

0.0018378 0.45996132 0.22237074 -0.74160533 -0.49446475 -0.13563001 0.96526728 1.07879625 -1.05977589 0.90134377 -0.04320339 -0.98267947 -1.10373854 -0.60191177 1.03342886 -0.88383656 0.51649787 0.01562509 -0.17324993 0.69707222 -0.34764921 -0.77662982 -1.16487092 -0.5230566 -0.19264775 -0.44462446 0.23255251 0.83362856 -1.13224602 -

0.78378981

0.18661133 0.61845374 0.40361813]

Train - accuracy : 0.67

Test - answer : [-1.18073311 -2.37364735 -0.19612826 0.40012342 - 1.30838148 0.65213403

0.70945882 0.23938228 1.0738403 -1.54664568 -0.02565504 0.73141352 -1.0767626 1.17396178 1.01581268]

Test - predicted: [-0.3283204 -0.84483835 -0.49358667 0.35230624 - 0.71167167 0.19957573

1.02910669 0.07859229 0.75390167 -0.75032857 -0.47681266 1.07802761 -0.8104986 0.2013684 1.00692209]

Test - accuracy : 0.66

reg.coef_: [0.39390555]

reg.intercept_: -0.03180434302675973

(13)

선형 회귀 (최소제곱법): wave

13

lr.coef_: [0.39390555]

lr.intercept_: -0.03180434302675973

0.39390555 0.03180434302675973

(14)

하브루타

 과제

boston 데이터 세트에 대하여 선형 회귀를 적용하고 정 확도를 계산하시오.

 과제 목적

선형 회귀 방법을 실습한다.

(15)

학습 목표

 wave 데이터 세트를 이용하여 회귀분석하는 예제를 살펴본다.

 wave 데이터 세트를 이용하여 선형회귀(최소제곱법) 를 수행한다.

 선형회귀(최소제곱법)의 장단점을 알아본다.

(16)

선형 회귀의 장단점

 1 차원 데이터만을 놓고 보면,

선형 회귀를 k-NN 회귀와 비교해 보면 직선을 사용한 예 측이 제약이 더 많아 보임

타겟 y가 특성들의 선형 조합이라는 것은 매우 과한 (또 는 비현실적인) 가정일 수 있음

 그러나, 특성이 많은 데이터 세트의 경우 선형 모델은

매우 훌륭한 성능을 낼 수 있음

(17)

선형 회귀: wave (예)

17

(18)

k-NN 회귀: wave (예)

(19)

학습 내용 요약

 wave 데이터 세트를 이용한 회귀분석

 선형회귀의 장단점

(20)

End

선형 회귀

(21)

선형 분류

(22)

학습 목표

 forge 데이터 세트를 이용하여 선형 분류하는 예제를 살펴본다.

 forge 데이터 세트를 이용하여 로지스틱 회귀를 수행 한다.

 로지스틱 회귀의 매개변수에 대해 살펴본다.

(23)

분류용 선형 모델

23

선형 이진분류 함수

, , …, : 특성 (특성의 개수 = ) , , …, , : 모델이 학습할 매개변수 : 모델이 만들어낸 예측값

예측값 을 임계치 0과 비교

0보다 작으면 클래스를 -1이라고 예측(분류)

0보다 크면 클래스를 +1이라고 예측(분류)

E.g. 로지스틱 회귀(sklearn.linear_model.LogisticRegression()), 선 형 서포트 벡터 머신(sklearn.svm.LinearSVC())

(24)

forge

feature 1 feature 2 target

9.15072323 5.49832246 1

9.25694192 5.13284858 1

9.17748385 5.09283177 1

9.32298256 5.09840649 1

8.34810316 5.13415623 1

8.30988863 4.80623966 1

7.99815287 4.8525051 1

9.96346605 4.59676542 1

8.67494727 4.47573059 1

9.49123469 4.33224792 1

11.54155807 5.21116083 1

8.1062269 4.28695977 0

11.93027136 4.64866327 1

8.7337095 2.49162431 0

10.24028948 2.45544401 1

9.50169345 1.93824624 0

8.34468785 1.63824349 0

(25)

선형 분류: forge (예)

25

import sklearn.linear_model import sklearn.svm

import matplotlib.pyplot import mglearn.datasets

X, y = mglearn.datasets.make_forge()

fig, axes = matplotlib.pyplot.subplots(1, 2, figsize=(10, 3))

for model, ax in zip([sklearn.svm.LinearSVC(), sklearn.linear_model.LogisticRegression()], axes):

clf = model.fit(X, y)

mglearn.plots.plot_2d_separator(clf, X, fill=False, eps=0.5, ax=ax, alpha=0.7) mglearn.discrete_scatter(X[:, 0], X[:, 1], y, ax=ax)

ax.set_title("{}".format(clf.__class__.__name__)) ax.set_xlabel("Feature 1")

ax.set_ylabel("Feature 2") axes[0].legend()

matplotlib.pyplot.show()

(26)

선형 분류: forge (예)

(27)

학습 목표

 forge 데이터 세트를 이용하여 선형 분류하는 예제를 살펴본다.

 forge 데이터 세트를 이용하여 로지스틱 회귀를 수행 한다.

 로지스틱 회귀의 매개변수에 대해 살펴본다.

(28)

로지스틱 회귀

 sklearn.linear_model.LogisticRegression()

(29)

forge

29

feature 1 feature 2 target

9.15072323 5.49832246 1

9.25694192 5.13284858 1

9.17748385 5.09283177 1

9.32298256 5.09840649 1

8.34810316 5.13415623 1

8.30988863 4.80623966 1

7.99815287 4.8525051 1

9.96346605 4.59676542 1

8.67494727 4.47573059 1

9.49123469 4.33224792 1

11.54155807 5.21116083 1

8.1062269 4.28695977 0

11.93027136 4.64866327 1

8.7337095 2.49162431 0

10.24028948 2.45544401 1

9.50169345 1.93824624 0

8.34468785 1.63824349 0

… … …

(30)

로지스틱 회귀: forge

import sklearn.model_selection import sklearn.linear_model import mglearn.datasets

X, y = mglearn.datasets.make_forge()

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=0) clf = sklearn.linear_model.LogisticRegression()

clf.fit(X_train, y_train)

print("Train - answer : {}".format(y_train))

print("Train - predicted: {}".format(clf.predict(X_train)))

print("Train - accuracy : {:.2f}".format(clf.score(X_train, y_train))) print()

print("Test - answer : {}".format(y_test))

print("Test - predicted: {}".format(clf.predict(X_test)))

print("Test - accuracy : {:.2f}".format(clf.score(X_test, y_test))) print()

(31)

로지스틱 회귀: forge

31

Train - answer : [0 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 0 1 0]

Train - predicted: [0 0 1 1 0 1 0 1 1 1 1 1 0 0 0 1 0 1 0]

Train - accuracy : 0.95

Test - answer : [1 0 1 0 1 1 0]

Test - predicted: [1 0 1 0 1 0 0]

Test - accuracy : 0.86

clf.coef_: [[-0.42296145 1.24488436]]

clf.intercept_: [-0.26660632]

(32)

로지스틱 회귀: forge

clf.coef_: [[-0.42296145 1.24488436]]

clf.intercept_: [-0.26660632]

−0.42296145 1.24488436 −0.26660632

−0.42296145 1.24488436 −0.26660632

(33)

하브루타

33

 과제

cancer 데이터 세트에 대하여 로지스틱 회귀를 적용하고 정확도를 계산하시오.

 과제 목적

로지스틱 회귀 방법을 실습한다.

(34)

학습 목표

 forge 데이터 세트를 이용하여 선형 분류하는 예제를 살펴본다.

 forge 데이터 세트를 이용하여 로지스틱 회귀를 수행 한다.

 로지스틱 회귀의 매개변수에 대해 살펴본다.

(35)

분류용 선형모델의 매개변수

35

 C

LogisticRegression과 LinearSVC에서 규제의 강도를 결 정하는 매개변수

C 값을 높이면 훈련 세트에 가능한 한 최대로 맞추려고 하고, C 값을 낮추면 를 0에 가까워지도록 만듦

C의 값을 낮추면 데이터 포인트 중 다수에 맞추려고 하 는 반면(과소적합 방향), C의 값을 높이면 개개의 데이터 포인트를 정확히 분류하려고 노력 (과대적합 방향)

C의 값이 작을수록 모델이 단순해짐

(36)

LogisticRegression 분석: cancer

import sklearn.model_selection import sklearn.datasets

import sklearn.linear_model

cancer = sklearn.datasets.load_breast_cancer()

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=42)

logreg = sklearn.linear_model.LogisticRegression().fit(X_train, y_train) print("Accuracy train: {:.3f}".format(logreg.score(X_train, y_train))) print("Accuracy test: {:.3f}".format(logreg.score(X_test, y_test)))

Accuracy train: 0.953 Accuracy test: 0.958

(37)

LogisticRegression 분석: cancer

37

import sklearn.model_selection import sklearn.datasets

import sklearn.linear_model

cancer = sklearn.datasets.load_breast_cancer()

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=42)

logreg = sklearn.linear_model.LogisticRegression(C=100).fit(X_train, y_train) print("Accuracy train: {:.3f}".format(logreg.score(X_train, y_train)))

print("Accuracy test: {:.3f}".format(logreg.score(X_test, y_test)))

Accuracy train: 0.972 Accuracy test: 0.965

훈련 세트의 정확도가 높아졌고, 테스트 세트의 정확도도 조금 증가했음

(38)

LogisticRegression 분석: cancer

import sklearn.model_selection import sklearn.datasets

import sklearn.linear_model

cancer = sklearn.datasets.load_breast_cancer()

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=42)

logreg = sklearn.linear_model.LogisticRegression(C=0.01).fit(X_train, y_train) print("Accuracy train: {:.3f}".format(logreg.score(X_train, y_train)))

print("Accuracy test: {:.3f}".format(logreg.score(X_test, y_test)))

Accuracy train: 0.934 Accuracy test: 0.930

(39)

학습 내용 요약

 wave 데이터 세트를 이용한 로지스틱 회귀

 로지스틱 회귀의 매개변수

(40)

End

선형 분류

(41)

선형 모델의 장단점

41

학습 속도가 빠르고 예측도 빠름

매우 큰 데이터 세트와 희소한 데이터 세트에도 잘 작동함

공식( )이 주어지므로 예측

이 어떻게 만들어지는지 비교적 쉽게 이해할 수 있음

그러나, 계수의 값들이 왜 그런지 명확하지 않을 때가 있음

샘플에 비해 특성이 많을 때 잘 작동함

다른 모델로 학습하기 어려운 매우 큰 데이터 세트에도 많 이 사용함

저차원의 데이터 세트에서는 다른 모델들의 일반화 성능이 더 좋음

(42)

쪽지 질문

오늘 학습의 핵심 주제는 무엇이었습니까?

오늘 학습한 내용 중에서 가장 와 닿는 내용은 무엇입니까?

오늘 학습한 내용 중에서 수업 시간에 꼭 실천해 보고 싶은 한 가지가 있다면 무 엇입니까?

오늘 학습한 내용 중에서 명확히 이해되지 못한 것이 있다면 무엇입니까?

오늘 수업과 관련하여 꼭 하고 싶은 건의사항이 있다면 무엇입니까?

(43)

End of Topic.03

선형 모델

참조

관련 문서

- "may develop any necessary disciplines" "with a view to ensuring that measures relating to qualification requirements and precedures, technical

In practice, "Plant systematics" involves relationships between plants and their evolution, especially at the higher levels, whereas "plant taxonomy" deals with

Credit expired Late shipment Late presentation 서류관련 서류에

2.1.15 "ITS" or "Intelligent Transport Systems" means the integration of information and communication technologies (ICTs) and applications that

IF(totals.transactions IS NULL, 0, 1) AS label, IFNULL(device.operatingSystem, "") AS os, device.isMobile AS is_mobile,.. IFNULL(geoNetwork.country, "")

Zhu, "Defending False Data Injection Attack on Smart Grid Network Using Adaptive CUSUM Test," Proceeding of the 45th Annual Conference on Information Sciences

○ The organizing committee of the Gangwon International Biennale said "We are surprised at the visitors' enthusiastic reactions" and added "the main reason

Cohen, "A Rule Based System for Optimizing Combinational Logic," IEEE Design & Test of