본문 바로가기
Python/ML&DL

[파이썬, Python] 머신러닝(Machine Learning)과 사이킷런(Scikit-learn) 모듈

by coding-choonsik 2023. 6. 14.
728x90
반응형
SMALL

1. 머신러닝

  • 컴퓨터 시스템이 데이터를 기반으로 학습하고 패턴을 발견하여 작업을 자동화하는 분야
  • 머신 러닝은 인공 지능(Artificial Intelligence)의 한 분야로서, 컴퓨터가 명시적인 프로그래밍 없이 데이터에서 학습하고 지식을 습득할 수 있는 능력을 갖게 하는 기술과 방법을 연구하고 개발
  • 인공지능: 인공(Artificial) + 지능(Intelligence)
    • 개발자에 의한 인공지능 & 데이터에 의한 인공지능
  • 머신러닝: 데이터를 기반으로 한 학습(learning)하는 기계(machine) 
  • 딥러닝: 깊은(deep) 신경망 구조의 머신러닝

 

 

1-1. 머신러닝의 배경

  • 과거 컴퓨터로 데이터를 읽어들이고, 데이터 안에서 특징을 학습하여 패턴을 찾아내는 작업 ➡ 패턴인식
  • 데이터를 대량으로 수집 처리할 수 있는 환경이 갖춰짐으로 할 수 있는 일들이 많아짐
  • 머신러닝은 데이터로부터 특징이나 패턴을 찾아내는 것이기 때문에 데이터가 가장 중요함

 

 

1-2. 정의

  • 인공지능의 한 분야로 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야
  • '무엇(x)으로 무엇(y)을 예측하고 싶다'의 f(함수)를 찾아내는 것
    • y: 출력변수(종속변수) - 데이터에서 주어진 정답값
    • x: 입력변수(독립변수) - 데이터에서의 문제
    • f: 모형(머신러닝 알고리즘)

2. 머신러닝으로 할 수 있는 것

 

2-1. 회귀(Regression)

  • 시계열(시간적인 변화를 연속적으로 관측한 데이터)데이터 같은 연속된 데이터를 취급할 때 사용하는 기법
  • 예) 과거 주식 추세를 학습해서 내일의 주가를 예측하는 시스템을 개발

 

2-2. 분류(Classification)

  • 주어진 데이터를 클래스별로 구별해 내는 과정으로 데이터와 데이터의 레이블값을 학습시키고 어느 범주에 속한 데이터인지 판단하고 예측
  • 예) 스팸메일인지 아닌지 구별해주는 시스템을 개발

 

2-3. 클러스터링(Clustering)

  • 분류와 비슷하지만 데이터에 레이블(정답 데이터)이 없음
  • 유사한 속성들을 갖는 데이터를 일정한 수의 군집으로 그룹핑하는 비지도 학습
  • 예) SNS 데이터를 통해 소셜 및 사회 이슈를 파악

3. 학습의 종류

 

3-1. 지도 학습

  • 문제와 정답을 모두 학습시켜 예측 또는 분류하는 문제
  • y=f(x)에 대하여 입력 변수(x)와 출력 변수(y)의 관계에 대하여 모델링 하는 것
  • y에 대하여 예측 또는 분류하는 문제

 

3-2. 비지도 학습

  • 출력 변수(y)가 존재하지 않고, 입력변수(x)간의 관계에 대해 모델링 하는 것
  • 군집분석: 유사한 데이터끼리 그룹화
  • 주성분 분석(Principal Component Analysis, PCA): 독립변수들의 차원을 축소화

 

3-3. 강화 학습

  • 수많은 시뮬레이션을 통해 현재의 선택이 미래에 보상이 최대가 되도록 학습

4. Scikit-learn 모듈

  •  대표적인 파이썬 머신러닝 모듈
  •  다양한 머신러닝 알고리즘을 제공
  •  다양한 샘플 데이터를 제공
  •  머신러닝 결과를 검증하는 기능을 제공
  •  BSD 라이선스이기 때문에 무료로 사용 및 배포가 가능

[사이킷런 공식홈페이지] https://scikit-learn.org

 

scikit-learn: machine learning in Python — scikit-learn 0.16.1 documentation

 

scikit-learn.org

 


4-1. LinearSVC

  • 클래스를 구분으로 하는 분류 문제에서 각 클래스를 잘 구분하는 선을 그려주는 방식을 사용하는 알고리즘
  • 지도학습 알고리즘을 사용하는 학습 전용 데이터와 결과 전용 데이터를 함께 가지고 있어야 사용이 가능
from sklearn.svm import LinearSVC            # 분류하는 모듈
from sklearn.metrics import accuracy_score   # 분류 모델의 정확도(accuracy)를 평가하기 위해 사용

 

# 학습 데이터(train date) 준비
learn_data = [[0,0], [1,0], [0,1], [1,1]]
leran_label = [0,0,0,1]

# 모델 객체 생성
svc = LinearSVC()

# 학습, fit()메서드 사용
svc.fit(learn_data, leran_label)  # fit(독립변수, 종속변수)

# 검증 데이터(test data) 준비
test_data = [[0,0], [1,0], [0,1], [1,1]]

# 예측
test_label = svc.predict(test_data)

test_label
>>> array([0, 0, 0, 1])


# 결과 검증
print(test_data, '의 예측 결과:', test_label)
>>> [[0, 0], [1, 0], [0, 1], [1, 1]] 의 예측 결과: [0 0 0 1]

# 정답과 예측된 테스트 label의 예측 정확도를 계산
print('정답률:', accuracy_score([0,0,0,1], test_label))  
>>> 정답률: 1.0

5. 아이리스 데이터셋 LinearSVC 적용하기

 

5-1. Iris DataSet

 

API Reference

This is the class and function reference of scikit-learn. Please refer to the full user guide for further details, as the class and function raw specifications may not be enough to give full guidel...

scikit-learn.org

 

▲ 공식 API Refrence에서 제공하는 아이리스 데이터셋의 정보

from sklearn.datasets import load_iris  # 데이터셋 불러오기
import pandas as pd

# 데이터셋 객체 생성
iris = load_iris() 

iris

 

 

# 해당 데이터셋의 description
print(iris['DESCR'])

 

✅ 독립변수의 종류

  •  sepal length in cm: 꽃받침의 길이
  •  sepal width in cm: 꽃받침의 너비
  •  petal length in cm: 꽃잎의 길이
  •  petal width in cm: 꽃잎의 너비
# 해당 데이터셋의 독립변수 개수 알아보기
data = iris['data']
data   # 4개의 독립변수와 150개의 샘플 수

 

✅ 종속변수(y) 알아보기

target = iris['target']
target

 

✅ 독립변수(x)들의 컬럼명 알아보기

feature_names = iris['feature_names']
feature_names

 

✅ DataFrame으로 만들기

df_iris = pd.DataFrame(data, columns=feature_names)  # 컬럼명은 feature_names와 동일
df_iris

 

✅ 정답 데이터(y) 파생변수로 추가하기

df_iris['target'] = target
df_iris.head()

 

 

✅ 데이터셋을 학습데이터와 검증데이터로 나누기

  • 전체 150개의 데이터를 train 데이터와 test 데이터로 나눔 
  •  나누는 비율을 75%:25% 정도(데이터가 부족할 경우에는 80%:20%, 데이터가 충분할 경우 60%:40%)
from sklearn.model_selection import train_test_split

 

# train_test_split(독립변수, 종속변수, 테스트사이즈=0.2(0.25...), 시드값(random_state=10(아무숫자)
# random_state: 랜덤으로 섞었을 때 계속 그 랜덤한 결과를 유지하기 위해
# df_iris.drop('target',1): target 컬럼만 제외한 4개의 컬럼은 독립변수
X_train, X_test, y_train, y_test = train_test_split(df_iris.drop('target',1), df_iris['target'], test_size=0.2, random_state=10)

 

📍 독립변수의 데이터 변수를 대문자로 사용하는 이유?!

  • 대문자 변수 이름은 주로 상수(Constant)를 나타내는 데에 사용되는 관례이지만, 머신 러닝에서는 독립변수(입력 변수)를 구분하기 위해 대문자를 사용
  • 일반적인 프로그래밍 관례 ^^...

 

✅ 학습데이터와 검증데이터 수 알아보기

X_train.shape, X_test.shape
>>> ((120, 4), (30, 4))

y_train.shape, y_test.shape
>>> ((120,), (30,))

 

✅ 분류 알고리즘 모델 학습시키기

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score  

svc=SVC()  # SVC 모델 객체 생성

# 모델 학습
svc.fit(X_train, y_train)

# test데이터로 예측
y_pred = svc.predict(X_test)

# 실제 데이터와 예측 데이터의 정답률
print('정답률: ', accuracy_score(y_test, y_pred))
>>> 정답률:  0.9666666666666667

 

 

 

728x90
반응형
LIST