머신러닝이란?
머신러닝(Machine Learning: 기계학습)
확률 통계 모델을 이용하여 특정한 데이터에서 규칙을 찾고 새로운 값을 예측하거나예측하는 모델을 만들어내는 방식. 다만, 수치화하기 어려운 데이터에 대해서는 한계가존재한다.
머신러닝의 구분:데이터의 형태
지도 학습(Supervised Learning)
컴퓨터에게 문제와 정답을 모두 준 상태에서 특정 문제가 들어오면 이를 정답으로유도하도록 데이터가 준비된 것
비지도학습(Unsupervised Learning)
오직 문제에 대한 내용을 주고 스스로 패턴화하여 정답을 찾도록 유도하는 것
강화 학습(Reinforcement Learning)
단순 문제와 정답을 주는 것이 아닌 정답을 맞출수록 보상을 주거나 정답을 못 맞출수록 처벌을 주어 학습을 강화하도록 하는 방식. 여러 보상과 처벌을 같이규정해야하기 때문에 난이도가 높다.
다만 비지도학습의 경우 매우 제한적으로 사용되는 만큼 대부분은 지도학습의 계열이다.
머신러닝의 구분:모델의 형태
회귀 모델(Regression Model)
어떤 입력들에 대해서 규칙을 이해하고 이를 규명하는 식을 하나 만드는 방식.
대게 지도학습에 사용된다.
분류 모델(Classification Model)
어떠한 분류를 구분하도록 만드는 모델을 일컫는다. 흔히 개와 고양이를 구분하는 문제와 같은 것이 분류 모델에 해당.
대게 지도학습에 사용된다.
Segmentaion, Object Detaction(세그멘테이션과 객체 탐지)
둘은 이미지에서 우리가 너무나도 당연시 하는 '객체 구분'을 하는 모델이다. 이 모델의 대부분은 딥러닝
모델이 대부분을 차지하고 있다.
군집화 모델(Clustering Model)
분류와 비슷하지만 분류 문제와 다르게 비지도학습이라는 점이 다른 점이다.
대게 지도학습에 사용된다.
머신러닝구조
데이터 수집, 저장
데이터 전처리
데이터들의 실제 수치적인 차이를 정리.
모델 선정
어떤 모델을 선정해야할지 정해야함.
평가 방법
- 학습용 데이터와 테스트용 데이터를 분리.
- 학습용 데이터는 실제 모델이 학습할 대상을, 그리고 실제 데이터이지만 일부 떼어놓은것을 테스트용 데이터라 함.
- 이를 통해서 모델이 테스트용 데이터에 맞는 결과를 출력하도록 하고 이 결과가 실제 테스트용 데이터에 존재하는 실제값과 비교하도록 함.
- 대게 회귀 문제는 'MSE(Mean Squared Error)', 분류 문제는 단순 정확도, 이미지의 경우에는 아직 명확한 정답은 없지만 여러가지 평가 방식이 존재함.
머신러닝 직접 해보기
< linear_regression_test>
import numpy.random
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_diabetes
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
load_data = load_diabetes()
df = pd.DataFrame(load_data.data, columns=load_data.feature_names)
df["target"] = load_data.target
print(df.head())
sns.pairplot(df[["target", "bmi", "bp", "s1"]])
# plt.show()
# 위 df를 이용하여 Linear Regression을 진행하고 모델을 평가하라.
# 계산을 위한 랜덤seed는 0으로 고정
numpy.random.seed(0) #랜덤 seed 고정
print(df.columns) #df전체 컬럼 출력
x = df[df.columns[:-1]] # 마지막 idx를 제외하만 나머지 컬럼을 x에 저장.
y = df["target"] #러닝은 타켓으로 한다.
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.7, shuffle=True) #데이터 분할
model = LinearRegression() #LinearRegression() 생성자를 이용하여 새로운 선형 회귀 모델 객체를 만든다.
model = model.fit(x_train, y_train) #모델 학습
print(model.coef_) #현 선형회귀 모델의 가중치값을 출력한다.
print(model.score(x_test, y_test)) #정확도 출력
<결과출력>
[ 72.47188595 -223.21161165 657.48915455 314.24795529 -562.76315416
331.1350922 -83.0521782 -75.50236282 816.50308987 -86.88439733]
0.4429203769660096
< classfication_test >
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.datasets import load_wine
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
load_data = load_wine()
df = pd.DataFrame(load_data.data, columns=load_data.feature_names)
df["target"] = load_data.target
# print(df.head())
# print(df.columns)
# 위 df를 이용하여 Linear Regression을 진행하고 모델을 평가하라.
# 계산을 위한 랜덤seed는 0으로 고정
np.random.seed(0)
x = df[df.columns[:-1]] # 마지막 idx를 제외하만 나머지 컬럼을 x에 저장.
y = df['target'] #머신러닝 학습 좌표
train_x, test_x, train_y, test_y = train_test_split(df[df.columns[:-1]], df["target"], test_size=0.2, shuffle=True) #데이터 분할
model = LinearSVC() #새로운 선형 회귀 모델 객체를 만든다.
model.fit(train_x, train_y) #모델 학습
print(model.coef_) #현 선형회귀 모델의 가중치값을 출력한다.
print(model.score(test_x, test_y)) #정확도 출력
<결과출력>
[[-3.32765430e-01 3.90806750e-01 1.20220960e+00 -3.01324144e-01
5.31589176e-03 -4.03880862e-01 1.28058052e+00 2.58204566e-01
-9.12845286e-01 -9.23080928e-02 -2.26369523e-01 4.59754269e-01
6.36413150e-03]
[ 5.49882316e-01 -4.79263290e-01 -1.03077342e+00 1.44895691e-01
-1.21329573e-02 2.35519228e-01 8.63919440e-02 1.25455545e-01
9.78592532e-01 -9.57723554e-01 4.50170360e-01 -3.00384815e-01
-4.98022228e-03]
[-1.34261457e-01 2.99619714e-01 4.33675343e-02 -4.87991539e-02
2.72584848e-02 -1.86047678e-01 -1.10428145e+00 -2.21170547e-02
-5.76855449e-01 7.20111944e-01 -2.58939516e-01 -7.23333877e-01
-1.19262340e-04]]
0.9166666666666666
댓글