- 임의의 수치(연속적인 값)를 예측하는 문제
- score 확인시, "결정 계수(R2)"로 평가
- 손실 함수 확인시, '평균 제곱 오차mean squared error'사용
- mean_absolute_error() : 회귀 모델에의 평균 절댓값 오차 계산
from sklearn.metrics import mean_absolute_error test_prediction = knr.predict(test_input) #예측값 mae = mean_absolute_error(test_target,test_prediction) #test_target : 정답값, test_prediction : 예측값 print(mae) >> 19.157142857142862 #예측이 타깃값과 19 정도 차이가 난다는 뜻
from sklearn.neighbors import KNeighborsRegressor
knr = KNeighborsRegressor()
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
# a & b 구하기
print(lr.coef_, lr.intercept_)
# a = lr.coef_ / 특성에 대한 계수를 포함한 배열 = 특성의 개수
# b = lr.intercept_ / 절편
poly=PolynomialFeatures(include_bias=False)
poly.fit(train_input)
train_poly=poly.transform(train_input)
poly.get_feature_names_out()
#[19.6, 5.14 , 3.04 , 384.16, 100.744 , 59.584, 26.4196, 15.6256, 9.2416]의 값은
#array(['x0', 'x1', 'x2', 'x0^2', 'x0 x1', 'x0 x2', 'x1^2', 'x1 x2','x2^2'], dtype=object)으로 계산됨
from sklearn.linear_model
사용from sklearn.linear_model
사용from sklearn.linear_model import Ridge
ridge=Ridge()
ridge.fit(train_X,train_y)
from sklearn.linear_model import Lasso
lasso=Lasso()
lasso.fit(train_X,train_y)
특징
- 예측값으로 이산적인 값을 출력
- 이산값 : 0과1로 처리할 수 있는 값으로써 연속적이 아닌 단속적인 값
- 아이리스 문제, 와인 종류, 부도 여부(yes/no), 여신 승인 여부, 동물 분류(dog/cat) 등
- 종류 (혼공머신 - 190p, 356p)
- 이진 분류 : Yes/ No처럼 두가지의 답으로 분류하는 것
- 다중 분류 : 다양한 답으로 분류 (타깃 데이터에 클래스가 2개 이상)
함수 종류 | 설명 |
---|---|
활성화 함수 | '시그모이드 함수' 사용 (하나의 선형 방정식 출력값을 0~1사이로 압축) |
손실 함수 | - '로지스틱 손실 함수' 혹은 '이진 크로스 엔트로피 손실 함수' 사용 - binary_crossentropy |
함수 종류 | 설명 |
---|---|
활성화 함수 | '소프트맥스 함수' 사용 (여러 개의 선형 방정식의 출력값을 0 ~ 1사이로 압축 & 전체 합을 1로) |
손실 함수 | - '크로스 엔트로피 손실 함수' 사용 - categorical_crossentropy - 원-핫 인코딩이 준비되어 있지 않을 경우, sparse_categorical_crossentropy |
손실 함수 (비용 함수)
- 지도학습(Supervised Learning) 시, 알고리즘이 예측한 값과 실제 정답의 차이를 비교하기 위한 함수.
- '학습 중에 알고리즘이 얼마나 잘못 예측하는 정도'를 확인하기 위한 함수로써 최적화(Optimization)를 위해 최소화하는 것이 목적인 함수
from sklearn.neighbors import KNeighborsClassifier
kn=KNeighborsClassifier()
#train_y 는 다중 클래스
kn.fit(train_X, train_y)
kn.classes_
파라미터 (Parameters) | 설명 |
---|---|
n_neighbors | - n_neighbors=int (참고할 데이터 개수,default=5) ex) kn49=KenighborsClassifier(n_neighbors=49) 가장 가까운 49개 데이터에서 다반수인 것을 예측 - 분류가 가능하도록 K는 홀수로 설정하는 것이 좋으며, 일반적으로는 총 데이터 수의 제곱근 값을 사용 ![]() |
weights | - {‘uniform’, ‘distance’}, callable or None, default=’uniform’ |
algorithm | - {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’ |
n_jobs | - n_neighbors=int (default=None) |
print(kn._fit_X) #knn으로 훈련된 x 프린트
print((kn._y) #knn으로 훈련된 x 프린트
distance, indexes= kn.kneighbors([[25,150]])
train_input[indexes]
>>>
array([[[ 25.4, 242. ],
[ 15. , 19.9],
[ 14.3, 19.7],
[ 13. , 12.2],
[ 12.2, 12.2]]])
from sklearn.linear_model import LogisticRegression
lr= LogisticRegression()
train_X= train_X.reshape(-1,n)
train_X= train_X.reshape(1,n)
from sklearn.linear_model import SGDClassifier
sc=SGDClassifier(loss='log_loss',max_iter=10,random_state=42)
#loss='log_loss' : 로지스틱 손실 함수 -> 클래스가 많아도 이진 분류 모델 생성 (a=양성, 나머지는 다 음성)
#loss 기본값 : hinge
#max_iter=10 : 10번 반복
sc.fit(train_X train_y)
이어서 모델 수행하기
sc.score(train_X, train_y)
에포크 300번 반복
# _ : 임시로 두는 것, 그냥 버리는 값
for _ in range(0,300):
sc.partial_fit(train_X, train_y, classes=classes)
train_score.append(sc.score(train_X,train_y))
test_score.append(sc.score(test_X, test_y))
제로베이스 '데이터 취업스쿨' 수강중
교재 '혼자 공부하는 머신러닝 + 딥러닝'
머신러닝 - 회귀(Regression) VS 분류(Classification)
회귀문제와 분류문제(Regression & Classification)