본문 바로가기
데이터 분석/(책)파이썬 머신러닝 완벽 가이드 정리

파이썬 머신러닝 완벽 가이드 정리 chapter 2

by HanYaung 2021. 9. 21.


2021/9/17
chapter 2 pg87~

머신러닝 용어
지도 학습 ㅡ 입력과 타깃을 전달해 새로운 데이터를 예측

비지도 학습 ㅡ 타깃(정답) 데이터 없이 입력 데이터에서 특징 찾는데 주로 이용

과대적합 ㅡ 훈련 세트에서 점수가 좋았는데 테스트 세트에서는 점수가 안좋은 경우
해결방안 ㅡ 모델을 덜 복잡하게 만든다 k 최근접 이웃의 경우 k값을 늘린다

과소적합 ㅡ 훈련세트보다 테스트 세트 점수가 높거나 두점수가 너무 낮을때
해결방안 ㅡ 모델을 복잡하게 만든다 k 최근접 이웃의 경우 k값을 줄인다

scikit learn 함수
fit(data,target)
ㅡ 사이킷런 모델을 훈련 두개의 인자를 이용
predict()
ㅡ 새로운 데이터의 정답을 예측
score()
ㅡ 성능 측정
x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
x_train은 학습데이터의 data y_train은 학습데이터의 target
x_test은 테스트데이터의 data y_test은 테스트데이터의 target
ㅡ 훈련데이터를 훈련세트와 테스트 세트로 나눔
testsize=0.2 로 파라미터를 전달하면 2:8 비중으로 나뉜다
PolynomialFeature()
ㅡ 변환기/ 특징 두개를 여러개의 특징으로 나타낸다 곱하기 제곱등으로
StandardScaler ㅡ 데이터 전처리함수


1.최근접 이웃 분류 알고리즘
주위에 가까운 데이터 k중에 다수을 차지 하는것을 정답으로 사용
특징 ㅡ 샘플간에 거리가 중요하기 때문에 데이터 전처리를 통해서 특성값을 일정한 기준으로 맞춰야 한다
#데이터 전처리 ㅡ 표준점수

KNeighborsClassifier()함수


2. 최근접 이웃 회귀 알고리즘
주위에 가까운 데이터 k들의 평균을 구해서 예측값으로 이용
KNeighborsRegressor


분류는 클래스(맞다,아니다 or 도미,광어)를 예측
회귀는 수치(평균)를 예측한다

Score함수로 성능을 측정할때
분류는 정답의 비율인 정확도를 퍼센트로 나타내고
회귀는 결정계수(R의제곱)으로 퍼센트를 나타낸다
R² =1 -(타깃 - 예측)의 합 / (타깃 - 평균)의 합

최근접 이웃 알고리즘들의 단점
분포에서 벗어나는 값을 예측하려면 엉뚱한 값을 예측한다




3. 선형회귀
회귀 모델을 한 마디로 정의하면 ‘어떤 자료에 대해서 그 값에 영향을 주는 조건을 고려하여 구한 평균’ 입니다
데이터 분포를 학습해 선을 긋는다
Y=ax+b 에서 x,y를 입력으로 받고 a와 b를 구해서 선을 그린다
LinearRegression
X를 통해 y를 예측


4.다항회귀
데이터 분포를 학습해 곡선을 긋는다
Y=ax² +bx+c 에서 a,b,c를 구해서 곡선을 그린다
LinearRegression이용
X를 통해 y를 예측


5. 다중회귀
여러 특성을 이용해서 평면 그린다
타깃 = a × 특성1 +b ×특성2 +절편
LinearRegression 이용

6. 규제 (regularization)
훈련세트를 과도하게 학습해 과대적합하지 않게 특성에 곱해지는 계수(또는 기울기)를 작게 만드는 일
선형 회귀에 규제를 추가한 모델은 릿지와 라쏘가 있다
릿지 회귀 ㅡ 계수를 제곱한 값을 기준으로 규제
Ridge()
라쏘 ㅡ 계수의 절대값을 기준으로 규제 (더 선호)
Lasso()
Alpha값으로 규제 강도를 조절 가능하다
알파값이 크면 규제가 세지므로 계수값이 줄고 과소적합이되도록 유도한다

알파값이 작으면 계수값을 줄이는 역할이 줄고 선형회귀 모델과 유사해져서 과대적합이될 가능성이 크다
최적의 알파값을 구하는 방법은 R제곱(결정계수) 그래프를 구하는것

다항회귀, 다중회귀도 모두 선형 회귀라고 할 수있다 왜냐하면 선형회귀로 표현 가능하기 때문
자세한 설명
https://brunch.co.kr/@gimmesilver/18#comment

그래서 선형,다중,다항 회귀 모두 LinearRegression를 이용한다

Pg 175까지

7. 로지스틱회귀 /시그모이드
선형 방정식을 이용한 분류 알고리즘
어떤 집단인지를 분류할때 이용
X값에따라 y값이 0~1사이로 표현되고
0.5이상이면 상위클래스 이하면 하위클래스로 분류하기도 함

8. 의사 결정트리
dt=DecisionTreeClassifer() -객체생성
dt.fit(x_train,y_train) -학습
pred = dt.predict(x_test) - 예측
accuracy_score(y_test,pred) - 정확도 측정
순서
데이터 세트 분리 -> 모델 학습 -> 예측 수행 -> 평가

9.교차검증 (cross validation) Kfold
데이터를 학습/검증 데이터 한개씩 나누는게 아니라
데이터를 k번 나누고 각각의 학습 모델의 성능을 비교하여 평균을 냄

장점
-데이터셋이 적을때 적용하면 좋다
단점
-가령 금융거래 사기 분류 모델에서 전체 데이터중 정상 거래 건수는 95% 사기인 거래건수는 5% 라면,
앞서 설명한 일반적인 교차 검증으로 데이터를 분할했을 때, 사기 거래 건수가 고루 분할 되지 못하고 한 분할에 몰릴 수 있다.

계층별 k-겹 교차 검증(Stratified k-fold cross validation) StratifiedKFold(n_split=3)

위에 k폴드의 단점을 해결하기 위해 데이터 클래스 별 분포를 고려해서 데이터 폴드 세트를 만드는 방법이 계층별 k-겹 교차 검증 이다.

분류 알고리즘에서는 stratified k폴드를 이용하는게 좋다
회귀에서는 stratified k폴드를 사용할 수 없다

cross_val_score - 교차검증을 편하게 해준다

10. GridSearchCV - 교차 검증과 최적 하이퍼 파라미터를 찾아낸다
하이퍼파라미터는 최적의 훈련 모델을 구현하기 위해 모델에 설정하는 변수로 학습률(Learning Rate), 에포크 수(훈련 반복 횟수), 가중치 초기화 등을 결정할 수 있습니다. 또한 하이퍼파라미터 튜닝 기법을 적용하여 훈련 모델의 최적값들을 찾을 수 있습니다.

GridSearchCV 는 완전 탐색(Exhaustive Search) 을 사용합니다.
가능한 모든 조합 중에서 가장 우수한 조합을 찾아줍니다. 하지만, 완전 탐색이기 때문에 Best 조합을 찾을 때까지 시간이 매우 오래 걸린다는 단점이 있습니다.

11. 데이터 인코딩
머신러닝에서 결손값과 문자열은 입력값으로 허용하지 않는다

인코딩 방식은 레이블 인코딩과 원-핫 인코딩이있다
-레이블 인코딩 : 카테고리 피처를 코드형 숫자 값으로 변환
tv:0 냉장고:1 컴퓨터:2 등

item=["tv","냉장고","컴퓨터"]
encoder= LabelEncoder() - 레이블인코더를 객체로 생성하고
encoder.fit(item)
labers= encoder,transform(items)
레이블 인코딩은 숫자의 순서는 중요도를 인식할 확률이 있어서 선형회귀에 사용하면 안된다 하지만 tree는 상관없음

-원핫인코딩 : OneHotEncoding 고유값에 해당하는 컬럼에만 1을 표시하고 나머지에는 0을 표시하는 방식
하지만 모든 문자형들을 숫자형으로 바꿔져야하는데
판다스에 get_dummies()를 이용하면 그럴필요없이 간단하게 가능하다

12 피처 스케일링과 정규화
피처 스케일링 : 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업
대표적으로 표준화와 정규화가 있다

-표준화는 데이터의 피처 각각이 평균0 분산 1인 가우시안 정규 분포를 가진값으로 변환해준다
StandardScaler - 표준화를 시켜준다
사이킷런에서 구현한 RBF 커널을 이용하는 서포트 벡터 머신이나 선형회귀, 로지스틱 회귀는 데이터가 가우시안 분포를 가지고 있다고 가정하고 구현됐기 때문에 중요한 요소가 된다

정규화는 서로 다른 피처의 크기를 통일하기 위해 크기를 변환해준다
0~ 100000사이에 값들을 0~1사이에 값으로 변환해준다
MinMaxScaler -정규화를 시켜준다
정규분포가 아닌경우 적용해 볼수있다