#회귀 싹 모아서 테스트

#1. 보스턴, 캘리포니아, 따릉, 캐글바이크
import numpy as np
from sklearn.datasets import fetch_california_housing

x, y = fetch_california_housing(return_X_y=True)

print(x.shape, y.shape)   #(150, 4) (150,)

from sklearn.svm import LinearSVC
from sklearn.linear_model import LogisticRegression       #레그레션 이름을 쓰고있지만 분류다... 시그모이드이다
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.ensemble import RandomForestRegressor
import warnings
warnings.filterwarnings('ignore')

# model = RandomForestRegressor()

#LinearSVC의 파라미터 C 는 작으면 작을수록 직선을 긋는다.
#분류문제에서 딥러닝은 layer를 거쳐 선을 수정하지만, 머신러닝은 단층 레이어로 선을 그어 클래스를 분류한다.
#때문에 고도화된 문제는 완벽한 분류를 위해 개발자가 파라미터 조정을 해야한다.

#3. 컴파일, 훈련
# model.compile(loss='sparse_categorical_crossentropy',
#               optimizer='adam',
#               metrics=['acc'])
# model.fit(x, y, epochs=100, validation_split=0.2)
#다중분류에서, 원핫 하지 않았을경우 sparse 사용함. 대체로 0이라는 라벨값이 있을때만 사용한다. 원핫을 포함하고있는 loss
# model.fit(x,y)   #머신러닝은 핏에 컴파일이 포함된다.

#4. 평가 예측
# results = model.evaluate(x,y)
# results = model.score(x,y)   #

# print(results)  #로스와 메트릭스의 첫번째 출력
# 머신러닝은 다 단층이다

models = [RandomForestRegressor(),DecisionTreeRegressor()]

for j, model in enumerate(models):
    model.fit(x,y)
    score = model.score(x,y)
    print(f" model {j+1}: {score:.3f}")
    
    
#캘리포니아
# model 1: 0.974
# model 2: 1.000

#따릉
#  model 1: 0.969
#  model 2: 1.000

#캐글바이크
#  model 1: 1.000
#  model 2: 1.000