들어가기 앞서
4주차 과제는 수업시간에 실습한 내용을 바탕으로 진행됩니다.
단순히 코드를 옮겨 적는 것이 아니라, 각 코드가 머신러닝 과정의 어떤 단계에 해당하는지를 이해해 주세요.
먼저, 수업시간에 작성한 코드를 그대로 실행하여 전체 흐름을 다시 확인해주세요.
이후, 제공된 코드 아래에 이어서 직접 코드를 작성하며 과제를 수행해주세요.
모르는 부분이 생긴거나 궁금하다면 디스코드 #정규스터디-질문방 에 질문해주세요!
4주차 스터디 영상과 강의록
강의 녹화본
토요일 공지 예정
강의록
과제
목표
•
수업시간의 내용을 직접 실습을 통해 익혀보아요.
•
로지스틱 회귀 모델과 SGD를 이해해보아요.
제출해야 할 파일
AI_정규_4주차.ipynb & wil.md
•
AI_정규_4주차.ipynb - 코드 (실습 + 과제)
•
wil.md- 배운 점 & 느낀 점 (300자 이상)
과제 명세서 - AI_정규_4주차.ipynb
수업시간에 실습한 내용과 과제를 하나의 파일 AI_정규_4주차.ipynb에 작성하여 제출해주세요.
수업시간 내용 실습
import pandas as pd
fish=pd.read_csv('http://bit.ly/fish_csv_data')
fish.head()
Python
복사
print(pd.unique(fish['Species']))
fish_input=fish[['Weight','Length','Diagonal','Height','Width']]
fish_input.head()
Python
복사
fish_target=fish['Species']
from sklearn.model_selection import train_test_split
train_input,test_input,train_target,test_target=train_test_split(fish_input,fish_target, random_state=42)
Python
복사
from sklearn.preprocessing import StandardScaler
ss=StandardScaler()
ss.fit(train_input)
train_scaled=ss.transform(train_input)
test_scaled=ss.transform(test_input)
Python
복사
from sklearn.neighbors import KNeighborsClassifier
kn=KNeighborsClassifier(n_neighbors=3)
kn.fit(train_scaled,train_target)
print(kn.score(train_scaled,train_target))
print(kn.score(test_scaled, test_target))
Python
복사
print(kn.classes_)
print(kn.predict(test_scaled[:5]))
import numpy as np
proba=kn.predict_proba(test_scaled[:5])
print(np.round(proba,decimals=4))
Python
복사
char_arr=np.array(['A','B','C','D','E'])
print(char_arr[[True,False,True,False,False]])
Python
복사
bream_smelt_indexes=(train_target=='Bream')|(train_target=='Smelt')
train_bream_smelt=train_scaled[bream_smelt_indexes]
target_bream_smelt=train_target[bream_smelt_indexes]
Python
복사
from sklearn.linear_model import LogisticRegression
lr=LogisticRegression()
lr.fit(train_bream_smelt,target_bream_smelt)
print(lr.predict(train_bream_smelt[:5]))
Python
복사
print(lr.predict_proba(train_bream_smelt[:5]))
Python
복사
print(lr.classes_)
Python
복사
lr = LogisticRegression(C=20, max_iter=1000)
lr.fit(train_scaled, train_target)
print(lr.score(train_scaled, train_target))
print(lr.score(test_scaled, test_target))
Python
복사
print(lr.predict(test_scaled[:5]))
Python
복사
proba=lr.predict_proba(test_scaled[:5])
print(np.round(proba,decimals=3))
Python
복사
print(lr.coef_.shape,lr.intercept_.shape)
Python
복사
import pandas as pd
fish=pd.read_csv('http://bit.ly/fish_csv_data')
Python
복사
fish_input=fish[['Weight','Length','Diagonal','Height','Width']]
fish_target=fish['Species']
Python
복사
from sklearn.model_selection import train_test_split
train_input,test_input,train_target,test_target=train_test_split(fish_input,fish_target, random_state=42)
Python
복사
from sklearn.preprocessing import StandardScaler
ss=StandardScaler()
ss.fit(train_input)
train_scaled=ss.transform(train_input)
test_scaled=ss.transform(test_input)
Python
복사
from sklearn.linear_model import SGDClassifier
sc=SGDClassifier(loss='log_loss', max_iter=10, random_state=42)
sc.fit(train_scaled,train_target)
print(sc.score(train_scaled,train_target))
print(sc.score(test_scaled,test_target))ㅍ
Python
복사
sc.partial_fit(train_scaled,train_target)
print(sc.score(train_scaled,train_target))
print(sc.score(test_scaled,test_target))
Python
복사
import numpy as np
sc=SGDClassifier(loss='log_loss', random_state=42)
train_score=[]
test_score=[]
classes=np.unique(train_target)
Python
복사
for _ in range(0,300):
sc.partial_fit(train_scaled,train_target,classes=classes)
train_score.append(sc.score(train_scaled,train_target))
test_score.append(sc.score(test_scaled,test_target))
Python
복사
import matplotlib.pyplot as plt
plt.plot(train_score)
plt.plot(test_score)
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.show()
Python
복사
sc=SGDClassifier(loss='log_loss', max_iter=100, tol=None, random_state=42)
sc.fit(train_scaled, train_target)
print(sc.score(train_scaled, train_target))
print(sc.score(test_scaled, test_target))
Python
복사
위 내용까지는 수업시간에 실습한 내용입니다.
아래부터는 과제에 해당하므로, 이어서 셀을 추가하여, 코드를 직접 작성해주세요.
과제
# 1번 과제
'''
과제 설명: 로지스틱 회귀 모델을 사용해 새로운 데이터셋에 대한 예측 결과 출력
과제 순서:
fish=pd.read_csv('http://bit.ly/fish_csv_data')
1. 위의 코드를 사용해 데이터셋을 가져오기
2, 가져온 데이터셋을 테스트 세트와 훈련 세트로 분리 (당연히 먼저 입력과 타깃부터 분리해야겠죠?)
3. 표준 정규화
4. 로지스틱 회귀 모델 훈련
5. 로지스틱 회귀 모델로 새로운 데이터셋 예측값 출력
6. 각 예측 결과에 대한 7종의 물고기 별 확률 출력
'''
# 새로운 데이터 셋
'''
test_data = np.array([
[350.0, 29.0, 33.5, 10.50, 4.60],
[18.5, 12.5, 14.0, 2.30, 1.35],
[820.0, 41.5, 45.0, 7.80, 5.10],
[160.0, 21.0, 23.5, 6.20, 3.60],
[550.0, 26.5, 31.0, 13.80, 6.10]
])
'''
# AI의 도움을 받으시는것도 좋습니다 그러나 코드의 구성과 결과에 대해서는 정확히 알고 계시는걸 추천합니다
Python
복사
# 2번 과제
'''
과제 설명: SGD classifier 모델을 훈련시키고 최적의 에포크 값을 찾기
과제 순서:
fish=pd.read_csv('http://bit.ly/fish_csv_data')
1. 위의 코드를 사용해 데이터셋을 가져오기
2. SGDclassifier 모델 훈련 (loss 파라미터는 hinge로 설정, 에포크수는 10으로 설정)
3. SGDclassifier 모델 훈련 (loss 파라미터는 hinge로 설정, 에포크수는 300으로 설정)
4. 매 에포크마다 훈련 점수와 테스트 점수 기록
5. 에포크를 x축 정확도를 y축으로 하는 matplotlib 그래프 그리기
6. 눈으로 보고 적절한 에포크 수 찾기
7. 해당 에포크 수로 모델 훈련하고 점수 출력해 2번 과정의 에포크 10인 모델과 정확도 비교
'''
# AI의 도움을 받으시는것도 좋습니다 그러나 코드의 구성과 결과에 대해서는 정확히 알고 계시는걸 추천합니다
Python
복사
과제 명세서 - wil.md
•
4주차 수업을 통해 배운 점 혹은 느낀 점을 작성해주세요.
마감 기한
5월 7일 (목) 23:59까지
제출 방법
자신의 레포지토리에 weekn 폴더를 생성해 .ipynb파일과 wil.md 파일을 제출합니다.
더 자세한 사항은 아래 링크를 참조해주세요.

