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
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
- 데이터셋: 특정한 작업을 위해 데이터를 관련성 있게 모아놓은 것
- 사이킷런에서 제공하는 대표적인 분류 모델 데이터셋
- [사이킷런 데이터셋 페이지] https://scikit-learn.org/stable/modules/classes.html?highlight=datasets#module-sklearn.datasets
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
'Python > ML&DL' 카테고리의 다른 글
[파이썬, Python] 머신러닝 - 4️⃣ 서포트 벡터 머신(Support Vector Machine) (0) | 2023.06.18 |
---|---|
[파이썬, Python] 머신러닝 - 3️⃣ 로지스틱 회귀(Logistic Regression) (0) | 2023.06.15 |
[파이썬, Python] 머신러닝 - 2️⃣ 의사결정나무(Decision Tree) (2) | 2023.06.14 |
[파이썬, Python] 머신러닝 - 1️⃣ 선형 회귀(Linear Regression) (0) | 2023.06.14 |
[파이썬, Python] 머신러닝을 위한 데이터 전처리 연습하기! (0) | 2023.06.14 |