1. mean_absolute_error()는 첫 번째 매개변수는 예측값, 두 번째 매개변수는 타겟을 전달한다. -> 첫 번째 매개변수는 타겟, 두 번째 매개변수는 예측값(X)

  2. 과대적합은 테스트 점수가 낮은것이고, 과소적합은 훈련세트 점수가 낮은것이다.(O)

  3. coef_와 intercept_를 머신러닝 알고리즘이 찾은 값이라는 의미로 모델 파라미터라고 부릅니다. 많은 머신러닝 알고리즘의 훈련 과정은 최적의 모델 파라미터를 찾는 것과 같고 이를 사례 기반 학습이라고 부릅니다. 사례 기반 학습 -> 모델 기반 학습(X)

  4. 훈련 세트의 점수와 테스트 세트의 점수 차이가 크면 좋지 않습니다. 테스트 세트의 너무 낮다면 모델이 훈련 세트에 과도하게 맞춰진 것이며 이를 과소적합이라고 합니다. 반대로 테스트 세트 점수가 너무 높다면 이를 과대적합이라고 합니다. 과소적합 -> 과대적합, 과대적합 -> 과소적합(X)

  5. 지도 학습 알고리즘은 크게 분류와 회귀로 나뉩니다. 분류는 임의의 어떤 숫자를 예측하는 문제이며 정해진 클래스가 없고 임의의 수치를 출력합니다. 분류 -> 회귀(X)

  6. 타깃의 평균 정도를 예측하는 수준이라면 결정계수는 1에 가까워지고, 예측이 타깃에 가까워지면 0에 가까워진다. -> 타깃의 평균 정도를 예측하는 수준이라면 결정계수는 1에 가까워지고, 예측이 타깃에 가까워지면 0에 가까워진다.(결졍계수가 0에 가깝다는 것은 변동성을 전혀 설명하지 못하고 평균값을 예측하는 수준에 머물러있다는 의미이고 1에 가까워질 수록 예측이 실제값과 매우 유사하다는 의미이다.) (X)

  7. 라쏘 모델도 릿지와 마찬가지로 계수 값을 0으로 만들 수 있다.(X)

  8. reshape() 메서드는 넘파이 배열의 차원을 바꿀 수 있다. →reshape() 함수는 배열의 모양을 변경하는 데 사용된다. 주로 배열을 다른 차원으로 재구성할 때 유용하다. (O)

  9. 모델의 객체를 만들때 alpha 매개변수로 규제의 강도를 조절한다. 이때 alpha 값이 커지면 규제의 강도는 커져 과소접합을 유도하고 alpha 값이 작아지면 규제의 강도가 작아져서 과대적합을 유도한다. Alpha 값이 커지면 규제의 강도가 커져 과소적합을 유도하고, alpha 값이 작아지면 규제의 강도가 작아져서 과대적합을 유도한다 (O)

  10. include_bias = False 는 절편을 포함하지 않고 True 는 절편을 포함한다.(O)

실습코드

#틀린 곳을 찾아 수정하시오
import numpy as np

perch_length = np.array(
    [8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0,
     21.0, 21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5,
     22.5, 22.7, 23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5,
     27.3, 27.5, 27.5, 27.5, 28.0, 28.7, 30.0, 32.8, 34.5, 35.0,
     36.5, 36.0, 37.0, 37.0, 39.0, 39.0, 39.0, 40.0, 40.0, 40.0,
     40.0, 42.0, 43.0, 43.0, 43.5, 44.0]
     )
perch_weight = np.array(
    [5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0,
     110.0, 115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0,
     130.0, 150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0,
     197.0, 218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0,
     514.0, 556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0,
     820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0,
     1000.0, 1000.0]
     )

from sklearn.model_selection import train_test_split

train_input, test_input, train_target, test_target = train_test_split(
    perch_length, perch_weight, random_state=42)
train_input = train_input.reshape(1,-1)   # reshape(-1, 1)
test_input = test_input.reshape(1,-1) 

from sklearn.neighbors import KNeighborsRegressor
knr = KNeighborsRegressor(n_neighbors=3)
knr.fit(train_input, train_target)

print(knr.predict([[50]]))

import matplotlib.pyplot as plt

distances, indexes = knr.kneighbors([[50]])

plt.scatter(train_input, train_target)
plt.scatter(train_input[indexes], train_target[indexes], marker='D')
plt.scatter(50, 1033, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

print(np.mean(train_target[indexes]))
print(knr.predict([[100]]))

distances, indexes = knr.neighbors([[100]])   # neighbors가 아니라 kneighbors이다

plt.scatter(train_input, train_target)
plt.scatter(train_input[indexes], train_target[indexes], marker='D')
plt.scatter(100, 1033, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression     # LogisticRegression이 아니라 LinearRegression
lr.fit(train_target, train_input)       # train_target과 train_input 위치 반대

print(lr.predict([[50]]))
print(lr.coef_, lr.intercept_)

plt.scatter(train_input, train_target)
plt.plot([15, 50], [15*lr.coef_+lr.intercept_, 50*lr.coef_+lr.intercept_])
plt.scatter(50, 1241.8, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

print(lr.score(train_input, train_target))
print(lr.score(test_input, test_target))

train_poly = np.column_stack((train_input ** 2, train_input))
test_poly = np.column_stack((test_input ** 2, test_input))

print(train_poly.shape, test_poly.shape)
lr = LinearRegression()
______________?_______________        #lr.fit(train_poly,train_target)
print(lr.predict([[50**2, 50]]))
print(lr.coef_, lr.intercept_)

point = np.arange(15, 50)
plt.scatter(train_input, train_target)
plt.plot(point, 1.01*point**2 - 21.6*point + 116.05)
plt.scatter([50], [1574], marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

print(lr.score(train_poly, train_target))
print(lr.score(test_poly, test_target))