2025. 1. 7. 15:40ㆍLLM(Large Language Model)의 기초/머신러닝과 딥러닝
1.사이킷런
* 사이킷런(scikit-learn)은 파이썬(Python)으로 작성된 오픈소스 머신러닝 라이브러리로, 데이터 분석과 예측 모델 구축을 위해 널리 사용됩니다.
* 간단하고 일관된 인터페이스를 제공하며, 지도 학습(Supervised Learning)과 비지도 학습(Unsupervised Learning) 알고리즘을 모두 지원합니다.
* 주로 분류(Classification), 회귀(Regression), 클러스터링(Clustering), 차원 축소(Dimensionality Reduction), 모델 선택(Model Selection), 전처리(Preprocessing)와 같은 다양한 작업을 수행할 수 있습니다.
* 사이킷런은 효율적인 수치 계산이 가능하며, 다양한 머신러닝 알고리즘을 손쉽게 사용할 수 있는 API를 제공합니다.
* 따라서 사이킷런은 데이터 과학과 인공지능 프로젝트에서 가장 많이 사용되는 라이브러리 중 하나입니다.
사이킷런 링크: https://scikit-learn.org/stable/
2. Iris 데이터셋
* 아이리스(Iris) 데이터셋은 머신러닝과 통계학에서 가장 널리 사용되는 대표적인 샘플 데이터셋입니다.
* 이 데이터셋은 붓꽃(Iris)의 세 가지 품종(Setosa, Versicolor, Virginica)에 대한 정보를 포함하고 있습니다.
* 각 품종별로 꽃받침(Sepal)의 길이와 너비, 꽃잎(Petal)의 길이와 너비로 이루어진 4개의 특성(Features)이 제공되며, 총 150개의 샘플 데이터가 있습니다.
* 각 품종당 50개의 샘플이 균등하게 분포되어 있어 다중 클래스 분류 문제를 연습하기에 적합합니다.
Iris 데이터 셋 링크 : https://scikit-learn.org/stable/api/sklearn.datasets.html#module-sklearn.datasets
> 데이터셋
* 데이터셋(Dataset)은 머신러닝과 데이터 과학에서 모델을 학습, 검증, 테스트하기 위해 사용되는 데이터의 집합입니다.
* 데이터셋은 일반적으로 입력 데이터(Features)와 정답 레이블(Labels)로 구성되며, 학습용 데이터셋(Training Dataset), 검증용 데이터셋(Validation Dataset), 테스트용 데이터셋(Test Dataset)으로 나누어 사용합니다.
* 또한 모델을 학습시키고, 하이퍼파라미터를 조정하며, 최종 성능을 평가하는 데 사용됩니다.
* 데이터셋의 품질과 크기는 모델의 성능에 큰 영향을 미치기 때문에, 적절한 전처리(Preprocessing)와 특성 엔지니어링(Feature Engineering)이 중요합니다.
* 데이터셋은 주로 학습 검증 테스트로 나눌수가 있다.
예시 1)
from sklearn.datasets import load_iris
iris = load_iris()
iris
-->
# sklearn.datasets 모듈은 데이터셋을 로드하거나 생성하는 기능을 제공한다.
# load_iris는 사이킷런에 내장된 Iris 데이터셋을 로드하는 함수이다.
# Iris 데이터셋은 붓꽃(iris) 품종 분류를 위한 대표적인 예제 데이터로,
# 3개의 클래스(품종)와 4개의 특징(꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비)로 구성되어 있다.
# iris 변수에 Iris 데이터셋을 로드하여 저장한다.
# 이 데이터셋은 딕셔너리 형태로 반환되며, 주요 키와 내용은 다음과 같다:
# - 'data': 각 샘플의 특징 데이터를 포함 (2D 배열)
# - 'target': 각 샘플의 정답 레이블(품종 번호)을 포함 (1D 배열)
# - 'feature_names': 각 특징의 이름을 포함 (리스트)
# - 'target_names': 클래스(품종) 이름을 포함 (리스트)
# - 'DESCR': 데이터셋에 대한 설명 (문자열)
iris = load_iris()
# 로드된 데이터셋의 내용을 확인한다.
# 딕셔너리 형태로 데이터의 구성 요소를 살펴볼 수 있다.
iris
-->
-->
{'data': array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.1],
[5.4, 3.7, 1.5, 0.2],
[4.8, 3.4, 1.6, 0.2],
[4.8, 3. , 1.4, 0.1],
[4.3, 3. , 1.1, 0.1],
[5.8, 4. , 1.2, 0.2],
[5.7, 4.4, 1.5, 0.4],
[5.4, 3.9, 1.3, 0.4],
[5.1, 3.5, 1.4, 0.3],
[5.7, 3.8, 1.7, 0.3],
[5.1, 3.8, 1.5, 0.3],
[5.4, 3.4, 1.7, 0.2],
[5.1, 3.7, 1.5, 0.4],
[4.6, 3.6, 1. , 0.2],
[5.1, 3.3, 1.7, 0.5],
[4.8, 3.4, 1.9, 0.2],
[5. , 3. , 1.6, 0.2],
[5. , 3.4, 1.6, 0.4],
[5.2, 3.5, 1.5, 0.2],
[5.2, 3.4, 1.4, 0.2],
[4.7, 3.2, 1.6, 0.2],
[4.8, 3.1, 1.6, 0.2],
[5.4, 3.4, 1.5, 0.4],
[5.2, 4.1, 1.5, 0.1],
[5.5, 4.2, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.2],
[5. , 3.2, 1.2, 0.2],
[5.5, 3.5, 1.3, 0.2],
[4.9, 3.6, 1.4, 0.1],
[4.4, 3. , 1.3, 0.2],
[5.1, 3.4, 1.5, 0.2],
[5. , 3.5, 1.3, 0.3],
[4.5, 2.3, 1.3, 0.3],
[4.4, 3.2, 1.3, 0.2],
[5. , 3.5, 1.6, 0.6],
[5.1, 3.8, 1.9, 0.4],
[4.8, 3. , 1.4, 0.3],
[5.1, 3.8, 1.6, 0.2],
[4.6, 3.2, 1.4, 0.2],
[5.3, 3.7, 1.5, 0.2],
[5. , 3.3, 1.4, 0.2],
[7. , 3.2, 4.7, 1.4],
[6.4, 3.2, 4.5, 1.5],
[6.9, 3.1, 4.9, 1.5],
[5.5, 2.3, 4. , 1.3],
[6.5, 2.8, 4.6, 1.5],
[5.7, 2.8, 4.5, 1.3],
[6.3, 3.3, 4.7, 1.6],
[4.9, 2.4, 3.3, 1. ],
[6.6, 2.9, 4.6, 1.3],
[5.2, 2.7, 3.9, 1.4],
[5. , 2. , 3.5, 1. ],
[5.9, 3. , 4.2, 1.5],
[6. , 2.2, 4. , 1. ],
[6.1, 2.9, 4.7, 1.4],
[5.6, 2.9, 3.6, 1.3],
[6.7, 3.1, 4.4, 1.4],
[5.6, 3. , 4.5, 1.5],
[5.8, 2.7, 4.1, 1. ],
[6.2, 2.2, 4.5, 1.5],
[5.6, 2.5, 3.9, 1.1],
[5.9, 3.2, 4.8, 1.8],
[6.1, 2.8, 4. , 1.3],
[6.3, 2.5, 4.9, 1.5],
[6.1, 2.8, 4.7, 1.2],
[6.4, 2.9, 4.3, 1.3],
[6.6, 3. , 4.4, 1.4],
[6.8, 2.8, 4.8, 1.4],
[6.7, 3. , 5. , 1.7],
[6. , 2.9, 4.5, 1.5],
[5.7, 2.6, 3.5, 1. ],
[5.5, 2.4, 3.8, 1.1],
[5.5, 2.4, 3.7, 1. ],
[5.8, 2.7, 3.9, 1.2],
[6. , 2.7, 5.1, 1.6],
[5.4, 3. , 4.5, 1.5],
[6. , 3.4, 4.5, 1.6],
[6.7, 3.1, 4.7, 1.5],
[6.3, 2.3, 4.4, 1.3],
[5.6, 3. , 4.1, 1.3],
[5.5, 2.5, 4. , 1.3],
[5.5, 2.6, 4.4, 1.2],
[6.1, 3. , 4.6, 1.4],
[5.8, 2.6, 4. , 1.2],
[5. , 2.3, 3.3, 1. ],
[5.6, 2.7, 4.2, 1.3],
[5.7, 3. , 4.2, 1.2],
[5.7, 2.9, 4.2, 1.3],
[6.2, 2.9, 4.3, 1.3],
[5.1, 2.5, 3. , 1.1],
[5.7, 2.8, 4.1, 1.3],
[6.3, 3.3, 6. , 2.5],
[5.8, 2.7, 5.1, 1.9],
[7.1, 3. , 5.9, 2.1],
[6.3, 2.9, 5.6, 1.8],
[6.5, 3. , 5.8, 2.2],
[7.6, 3. , 6.6, 2.1],
[4.9, 2.5, 4.5, 1.7],
[7.3, 2.9, 6.3, 1.8],
[6.7, 2.5, 5.8, 1.8],
[7.2, 3.6, 6.1, 2.5],
[6.5, 3.2, 5.1, 2. ],
[6.4, 2.7, 5.3, 1.9],
[6.8, 3. , 5.5, 2.1],
[5.7, 2.5, 5. , 2. ],
[5.8, 2.8, 5.1, 2.4],
[6.4, 3.2, 5.3, 2.3],
[6.5, 3. , 5.5, 1.8],
[7.7, 3.8, 6.7, 2.2],
[7.7, 2.6, 6.9, 2.3],
[6. , 2.2, 5. , 1.5],
[6.9, 3.2, 5.7, 2.3],
[5.6, 2.8, 4.9, 2. ],
[7.7, 2.8, 6.7, 2. ],
[6.3, 2.7, 4.9, 1.8],
[6.7, 3.3, 5.7, 2.1],
[7.2, 3.2, 6. , 1.8],
[6.2, 2.8, 4.8, 1.8],
[6.1, 3. , 4.9, 1.8],
[6.4, 2.8, 5.6, 2.1],
[7.2, 3. , 5.8, 1.6],
[7.4, 2.8, 6.1, 1.9],
[7.9, 3.8, 6.4, 2. ],
[6.4, 2.8, 5.6, 2.2],
[6.3, 2.8, 5.1, 1.5],
[6.1, 2.6, 5.6, 1.4],
[7.7, 3. , 6.1, 2.3],
[6.3, 3.4, 5.6, 2.4],
[6.4, 3.1, 5.5, 1.8],
[6. , 3. , 4.8, 1.8],
[6.9, 3.1, 5.4, 2.1],
[6.7, 3.1, 5.6, 2.4],
[6.9, 3.1, 5.1, 2.3],
[5.8, 2.7, 5.1, 1.9],
[6.8, 3.2, 5.9, 2.3],
[6.7, 3.3, 5.7, 2.5],
[6.7, 3. , 5.2, 2.3],
[6.3, 2.5, 5. , 1.9],
[6.5, 3. , 5.2, 2. ],
[6.2, 3.4, 5.4, 2.3],
[5.9, 3. , 5.1, 1.8]]),
'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
'frame': None,
'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='<U10'),
'DESCR': '.. _iris_dataset:\n\nIris plants dataset\n--------------------\n\n**Data Set Characteristics:**\n\n:Number of Instances: 150 (50 in each of three classes)\n:Number of Attributes: 4 numeric, predictive attributes and the class\n:Attribute Information:\n - sepal length in cm\n - sepal width in cm\n - petal length in cm\n - petal width in cm\n - class:\n - Iris-Setosa\n - Iris-Versicolour\n - Iris-Virginica\n\n:Summary Statistics:\n\n============== ==== ==== ======= ===== ====================\n Min Max Mean SD Class Correlation\n============== ==== ==== ======= ===== ====================\nsepal length: 4.3 7.9 5.84 0.83 0.7826\nsepal width: 2.0 4.4 3.05 0.43 -0.4194\npetal length: 1.0 6.9 3.76 1.76 0.9490 (high!)\npetal width: 0.1 2.5 1.20 0.76 0.9565 (high!)\n============== ==== ==== ======= ===== ====================\n\n:Missing Attribute Values: None\n:Class Distribution: 33.3% for each of 3 classes.\n:Creator: R.A. Fisher\n:Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)\n:Date: July, 1988\n\nThe famous Iris database, first used by Sir R.A. Fisher. The dataset is taken\nfrom Fisher\'s paper. Note that it\'s the same as in R, but not as in the UCI\nMachine Learning Repository, which has two wrong data points.\n\nThis is perhaps the best known database to be found in the\npattern recognition literature. Fisher\'s paper is a classic in the field and\nis referenced frequently to this day. (See Duda & Hart, for example.) The\ndata set contains 3 classes of 50 instances each, where each class refers to a\ntype of iris plant. One class is linearly separable from the other 2; the\nlatter are NOT linearly separable from each other.\n\n.. dropdown:: References\n\n - Fisher, R.A. "The use of multiple measurements in taxonomic problems"\n Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions to\n Mathematical Statistics" (John Wiley, NY, 1950).\n - Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.\n (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218.\n - Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System\n Structure and Classification Rule for Recognition in Partially Exposed\n Environments". IEEE Transactions on Pattern Analysis and Machine\n Intelligence, Vol. PAMI-2, No. 1, 67-71.\n - Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE Transactions\n on Information Theory, May 1972, 431-433.\n - See also: 1988 MLC Proceedings, 54-64. Cheeseman et al"s AUTOCLASS II\n conceptual clustering system finds 3 classes in the data.\n - Many, many more ...\n',
'feature_names': ['sepal length (cm)',
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)'],
'filename': 'iris.csv',
'data_module': 'sklearn.datasets.data'}
예시 2)
# 'DESCR' 키는 Iris 데이터셋에 대한 설명(description)을 포함하고 있다.
# iris['DESCR']를 출력하면 데이터셋의 특성과 구성 요소에 대한 자세한 설명이 표시된다.
# 출력되는 정보는 다음과 같다:
# - 데이터셋의 목적: Iris 데이터셋은 꽃의 특징을 기반으로 품종을 분류하기 위한 데이터.
# - 데이터셋의 구성 요소: 특징 이름, 클래스 이름, 데이터 포인트의 개수 등.
# - 데이터셋의 형식: 각 샘플은 4개의 특징 값과 1개의 클래스(품종)로 구성.
# - 데이터셋의 출처: 데이터셋이 어디에서 유래되었는지에 대한 정보.
# 'DESCR'를 출력하여 데이터셋의 설명을 확인한다.
print(iris['DESCR'])
-->
.. _iris_dataset:
Iris plants dataset
--------------------
**Data Set Characteristics:**
:Number of Instances: 150 (50 in each of three classes)
:Number of Attributes: 4 numeric, predictive attributes and the class
:Attribute Information:
- sepal length in cm
- sepal width in cm
- petal length in cm
- petal width in cm
- class:
- Iris-Setosa
- Iris-Versicolour
- Iris-Virginica
:Summary Statistics:
============== ==== ==== ======= ===== ====================
Min Max Mean SD Class Correlation
============== ==== ==== ======= ===== ====================
sepal length: 4.3 7.9 5.84 0.83 0.7826
sepal width: 2.0 4.4 3.05 0.43 -0.4194
petal length: 1.0 6.9 3.76 1.76 0.9490 (high!)
petal width: 0.1 2.5 1.20 0.76 0.9565 (high!)
============== ==== ==== ======= ===== ====================
:Missing Attribute Values: None
:Class Distribution: 33.3% for each of 3 classes.
:Creator: R.A. Fisher
:Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
:Date: July, 1988
The famous Iris database, first used by Sir R.A. Fisher. The dataset is taken
from Fisher's paper. Note that it's the same as in R, but not as in the UCI
Machine Learning Repository, which has two wrong data points.
This is perhaps the best known database to be found in the
pattern recognition literature. Fisher's paper is a classic in the field and
is referenced frequently to this day. (See Duda & Hart, for example.) The
data set contains 3 classes of 50 instances each, where each class refers to a
type of iris plant. One class is linearly separable from the other 2; the
latter are NOT linearly separable from each other.
.. dropdown:: References
- Fisher, R.A. "The use of multiple measurements in taxonomic problems"
Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions to
Mathematical Statistics" (John Wiley, NY, 1950).
- Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.
(Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218.
- Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
Structure and Classification Rule for Recognition in Partially Exposed
Environments". IEEE Transactions on Pattern Analysis and Machine
Intelligence, Vol. PAMI-2, No. 1, 67-71.
- Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE Transactions
on Information Theory, May 1972, 431-433.
- See also: 1988 MLC Proceedings, 54-64. Cheeseman et al"s AUTOCLASS II
conceptual clustering system finds 3 classes in the data.
- Many, many more ...
예시 3)
# sepal length in cm: 꽃받침의 길이
# sepal width in cm: 꽃받침의 너비
# petal length in cm: 꽃잎의 길이
# petal width in cm: 꽃잎의 너비
data = iris['data']
data
-->
# Iris 데이터셋의 'data' 키는 각 샘플의 특징(feature) 값을 포함하고 있다.
# 이 데이터는 2D 배열 형태로 구성되어 있으며, 배열의 각 행은 하나의 데이터 샘플(꽃),
# 각 열은 꽃의 특징(속성)을 나타낸다.
# 특징(feature) 정보는 다음과 같다:
# - sepal length in cm: 꽃받침의 길이 (cm 단위)
# - sepal width in cm: 꽃받침의 너비 (cm 단위)
# - petal length in cm: 꽃잎의 길이 (cm 단위)
# - petal width in cm: 꽃잎의 너비 (cm 단위)
# iris['data']를 변수 data에 저장하여, 특징 데이터를 가져온다.
data = iris['data']
# 특징 데이터(data)를 출력한다.
# 출력된 값은 2D 배열이며, 각 행은 개별 샘플의 꽃받침 및 꽃잎의 길이와 너비를 나타낸다.
data
-->
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2],
[4.4, 2.9, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.1],
[5.4, 3.7, 1.5, 0.2],
[4.8, 3.4, 1.6, 0.2],
[4.8, 3. , 1.4, 0.1],
[4.3, 3. , 1.1, 0.1],
[5.8, 4. , 1.2, 0.2],
[5.7, 4.4, 1.5, 0.4],
[5.4, 3.9, 1.3, 0.4],
[5.1, 3.5, 1.4, 0.3],
[5.7, 3.8, 1.7, 0.3],
[5.1, 3.8, 1.5, 0.3],
[5.4, 3.4, 1.7, 0.2],
[5.1, 3.7, 1.5, 0.4],
[4.6, 3.6, 1. , 0.2],
[5.1, 3.3, 1.7, 0.5],
[4.8, 3.4, 1.9, 0.2],
[5. , 3. , 1.6, 0.2],
[5. , 3.4, 1.6, 0.4],
[5.2, 3.5, 1.5, 0.2],
[5.2, 3.4, 1.4, 0.2],
[4.7, 3.2, 1.6, 0.2],
[4.8, 3.1, 1.6, 0.2],
[5.4, 3.4, 1.5, 0.4],
[5.2, 4.1, 1.5, 0.1],
[5.5, 4.2, 1.4, 0.2],
[4.9, 3.1, 1.5, 0.2],
[5. , 3.2, 1.2, 0.2],
[5.5, 3.5, 1.3, 0.2],
[4.9, 3.6, 1.4, 0.1],
[4.4, 3. , 1.3, 0.2],
[5.1, 3.4, 1.5, 0.2],
[5. , 3.5, 1.3, 0.3],
[4.5, 2.3, 1.3, 0.3],
[4.4, 3.2, 1.3, 0.2],
[5. , 3.5, 1.6, 0.6],
[5.1, 3.8, 1.9, 0.4],
[4.8, 3. , 1.4, 0.3],
[5.1, 3.8, 1.6, 0.2],
[4.6, 3.2, 1.4, 0.2],
[5.3, 3.7, 1.5, 0.2],
[5. , 3.3, 1.4, 0.2],
[7. , 3.2, 4.7, 1.4],
[6.4, 3.2, 4.5, 1.5],
[6.9, 3.1, 4.9, 1.5],
[5.5, 2.3, 4. , 1.3],
[6.5, 2.8, 4.6, 1.5],
[5.7, 2.8, 4.5, 1.3],
[6.3, 3.3, 4.7, 1.6],
[4.9, 2.4, 3.3, 1. ],
[6.6, 2.9, 4.6, 1.3],
[5.2, 2.7, 3.9, 1.4],
[5. , 2. , 3.5, 1. ],
[5.9, 3. , 4.2, 1.5],
[6. , 2.2, 4. , 1. ],
[6.1, 2.9, 4.7, 1.4],
[5.6, 2.9, 3.6, 1.3],
[6.7, 3.1, 4.4, 1.4],
[5.6, 3. , 4.5, 1.5],
[5.8, 2.7, 4.1, 1. ],
[6.2, 2.2, 4.5, 1.5],
[5.6, 2.5, 3.9, 1.1],
[5.9, 3.2, 4.8, 1.8],
[6.1, 2.8, 4. , 1.3],
[6.3, 2.5, 4.9, 1.5],
[6.1, 2.8, 4.7, 1.2],
[6.4, 2.9, 4.3, 1.3],
[6.6, 3. , 4.4, 1.4],
[6.8, 2.8, 4.8, 1.4],
[6.7, 3. , 5. , 1.7],
[6. , 2.9, 4.5, 1.5],
[5.7, 2.6, 3.5, 1. ],
[5.5, 2.4, 3.8, 1.1],
[5.5, 2.4, 3.7, 1. ],
[5.8, 2.7, 3.9, 1.2],
[6. , 2.7, 5.1, 1.6],
[5.4, 3. , 4.5, 1.5],
[6. , 3.4, 4.5, 1.6],
[6.7, 3.1, 4.7, 1.5],
[6.3, 2.3, 4.4, 1.3],
[5.6, 3. , 4.1, 1.3],
[5.5, 2.5, 4. , 1.3],
[5.5, 2.6, 4.4, 1.2],
[6.1, 3. , 4.6, 1.4],
[5.8, 2.6, 4. , 1.2],
[5. , 2.3, 3.3, 1. ],
[5.6, 2.7, 4.2, 1.3],
[5.7, 3. , 4.2, 1.2],
[5.7, 2.9, 4.2, 1.3],
[6.2, 2.9, 4.3, 1.3],
[5.1, 2.5, 3. , 1.1],
[5.7, 2.8, 4.1, 1.3],
[6.3, 3.3, 6. , 2.5],
[5.8, 2.7, 5.1, 1.9],
[7.1, 3. , 5.9, 2.1],
[6.3, 2.9, 5.6, 1.8],
[6.5, 3. , 5.8, 2.2],
[7.6, 3. , 6.6, 2.1],
[4.9, 2.5, 4.5, 1.7],
[7.3, 2.9, 6.3, 1.8],
[6.7, 2.5, 5.8, 1.8],
[7.2, 3.6, 6.1, 2.5],
[6.5, 3.2, 5.1, 2. ],
[6.4, 2.7, 5.3, 1.9],
[6.8, 3. , 5.5, 2.1],
[5.7, 2.5, 5. , 2. ],
[5.8, 2.8, 5.1, 2.4],
[6.4, 3.2, 5.3, 2.3],
[6.5, 3. , 5.5, 1.8],
[7.7, 3.8, 6.7, 2.2],
[7.7, 2.6, 6.9, 2.3],
[6. , 2.2, 5. , 1.5],
[6.9, 3.2, 5.7, 2.3],
[5.6, 2.8, 4.9, 2. ],
[7.7, 2.8, 6.7, 2. ],
[6.3, 2.7, 4.9, 1.8],
[6.7, 3.3, 5.7, 2.1],
[7.2, 3.2, 6. , 1.8],
[6.2, 2.8, 4.8, 1.8],
[6.1, 3. , 4.9, 1.8],
[6.4, 2.8, 5.6, 2.1],
[7.2, 3. , 5.8, 1.6],
[7.4, 2.8, 6.1, 1.9],
[7.9, 3.8, 6.4, 2. ],
[6.4, 2.8, 5.6, 2.2],
[6.3, 2.8, 5.1, 1.5],
[6.1, 2.6, 5.6, 1.4],
[7.7, 3. , 6.1, 2.3],
[6.3, 3.4, 5.6, 2.4],
[6.4, 3.1, 5.5, 1.8],
[6. , 3. , 4.8, 1.8],
[6.9, 3.1, 5.4, 2.1],
[6.7, 3.1, 5.6, 2.4],
[6.9, 3.1, 5.1, 2.3],
[5.8, 2.7, 5.1, 1.9],
[6.8, 3.2, 5.9, 2.3],
[6.7, 3.3, 5.7, 2.5],
[6.7, 3. , 5.2, 2.3],
[6.3, 2.5, 5. , 1.9],
[6.5, 3. , 5.2, 2. ],
[6.2, 3.4, 5.4, 2.3],
[5.9, 3. , 5.1, 1.8]])
예제 4)
feature_names = iris['feature_names']
feature_names
-->
['sepal length (cm)',
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)']
# Iris 데이터셋의 'feature_names' 키는 각 특징(feature)의 이름을 포함하고 있다.
# 이 정보는 특징 데이터(iris['data'])의 각 열이 어떤 속성을 나타내는지 알려준다.
# feature_names에는 다음과 같은 특징 이름이 포함되어 있다:
# - 'sepal length (cm)': 꽃받침의 길이
# - 'sepal width (cm)': 꽃받침의 너비
# - 'petal length (cm)': 꽃잎의 길이
# - 'petal width (cm)': 꽃잎의 너비
# iris['feature_names']를 변수 feature_names에 저장하여 특징 이름을 가져온다.
feature_names = iris['feature_names']
# 특징 이름(feature_names)을 출력한다.
# 출력된 값은 문자열 리스트로, 각 요소는 데이터의 열 순서에 해당하는 특징 이름이다.
feature_names
예제 5)
# pandas 모듈은 데이터 분석 및 조작을 위한 라이브러리로, 데이터프레임 형식으로 데이터를 처리할 수 있다.
# pd.DataFrame은 데이터를 데이터프레임 형태로 변환하는 함수이다.
# 'data' 변수는 Iris 데이터셋에서 추출된 특징 값(꽃받침과 꽃잎의 길이 및 너비)이다.
# 'feature_names' 변수는 각 열에 해당하는 특징 이름을 포함하고 있다.
# pd.DataFrame(data, columns=feature_names)는 다음과 같이 동작한다:
# - data: 데이터프레임에 넣을 데이터 (여기서는 Iris 데이터의 2D 배열).
# - columns: 각 열의 이름을 지정 (여기서는 특징 이름 리스트).
# 결과적으로 Iris 데이터셋의 특징 값을 데이터프레임 형식으로 변환하고, 각 열에 적절한 이름을 부여한다.
# 생성된 데이터프레임(df_iris)을 출력한다.
# 출력된 데이터프레임은 각 행이 개별 샘플을 나타내며,
# 각 열은 꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비로 구성된다.
import pandas as pd
df_iris = pd.DataFrame(data, columns=feature_names)
df_iris
-->
-->
예제 6)
# Iris 데이터셋의 'target' 키는 각 샘플의 정답 레이블(품종 번호)을 포함하고 있다.
# 레이블은 숫자로 표현되며, 다음과 같은 클래스(품종)에 해당한다:
# - 0: Setosa (세토사 품종)
# - 1: Versicolor (버시컬러 품종)
# - 2: Virginica (버지니카 품종)
# iris['target']를 변수 target에 저장하여 데이터셋의 레이블 값을 가져온다.
target = iris['target']
# 레이블 데이터(target)를 출력한다.
# 출력된 값은 1D 배열로, 각 숫자는 데이터셋의 샘플이 속한 품종 번호를 나타낸다.
target
-->
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
예제 7)
# Iris 데이터셋에서 가져온 레이블(target)을 기존 데이터프레임(df_iris)에 추가한다.
# df_iris는 특징 값만 포함하고 있었으므로, 레이블을 추가하여 데이터와 정답을 함께 저장할 수 있다.
# df_iris['target']는 데이터프레임의 새로운 열로 추가된다.
# 이 열의 값은 target 배열로 설정되며, 각 샘플에 해당하는 레이블(품종 번호)이 저장된다.
df_iris['target'] = target
# 레이블이 추가된 데이터프레임(df_iris)을 출력한다.
# 출력된 데이터프레임의 마지막 열은 'target'으로, 각 행의 샘플이 속한 품종 번호를 나타낸다.
df_iris
-->
예제 8)
# train_test_split 함수를 사용하여 데이터를 학습용과 테스트용으로 분할한다.
# 특징 데이터(df_iris.drop('target', axis=1))와 레이블(df_iris['target'])을 분리하여 입력.
# - 특징 데이터: 'target' 열을 제외한 나머지 열.
# - 레이블 데이터: 'target' 열.
# 데이터 분할 비율: 80%는 학습 데이터(X_train, y_train), 20%는 테스트 데이터(X_test, y_test)로 설정.
# random_state=2025는 랜덤 시드를 고정하여 동일한 데이터 분할 결과를 재현 가능하도록 설정.
X_train, X_test, y_train, y_test = train_test_split(
df_iris.drop('target', axis=1), # 특징 데이터 (열에서 'target' 제거)
df_iris['target'], # 레이블 데이터 ('target' 열)
test_size=0.2, # 테스트 데이터 비율: 20%
random_state=2025 # 랜덤 시드 값
)
# 학습용 특징 데이터(X_train)의 크기(shape)와 테스트용 특징 데이터(X_test)의 크기(shape)를 확인.
# 반환되는 크기는 각각 (학습 데이터 샘플 수, 특징 수), (테스트 데이터 샘플 수, 특징 수)이다.
X_train.shape, X_test.shape
-->
((120, 4), (30, 4))
y_train.shape, y_test.shape
-->
((120,), (30,))
> 서포트 벡터 머신(Support Vector Machine, SVM)
* 서포트 벡터 머신(SVM)은 두 개 이상의 클래스(Class)를 구분하는 지도 학습(Supervised Learning) 알고리즘입니다.
* 주로 분류(Classification) 문제를 해결하는 데 사용되며, 일부 경우 회귀(Regression) 문제에도 사용됩니다.
* SVM의 목표는 두 클래스 간의 경계를 가장 잘 구분하는 최적의 초평면(Hyperplane)을 찾는 것입니다.
> SVC
* SVC(Support Vector Classifier)는 서포트 벡터 머신(SVM, Support Vector Machine)을 사용한 분류(Classification) 알고리즘입니다.
* 사이킷런(sklearn.svm.SVC)에서 제공되며, 이진 분류(Binary Classification)와 다중 클래스 분류(Multi-Class Classification) 문제를 해결할 수 있습니다.
1. import 해준다
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
> accuracy_score
* accuracy_score는 사이킷런(sklearn)의 metrics 모듈에서 제공하는 성능 평가 지표로, 분류(Classification) 모델의 예측 정확도(Accuracy)를 측정하는 함수입니다.
* 이 함수는 모델이 예측한 값과 실제 정답이 얼마나 일치하는지를 백분율로 나타내며, 전체 샘플 중 올바르게 예측된 샘플의 비율을 계산합니다.
> Accuracy
* 정확도(Accuracy)는 머신러닝과 통계학에서 모델의 성능을 평가하는 가장 기본적인 지표 중 하나로, 전체 예측 중에서 얼마나 많은 예측이 실제 정답과 일치했는지를 나타내는 비율입니다.
공식은 다음과 같습니다.
예시 1)
# SVC는 사이킷런에서 제공하는 SVM(Support Vector Machine) 분류 모델 클래스이다.
# SVM은 분류 문제에서 클래스 간의 결정 경계를 학습하여 새로운 데이터를 분류하는 데 사용된다.
# SVC()는 기본 매개변수를 사용하여 SVM 모델 객체를 생성한다.
# - 기본적으로 RBF 커널(radial basis function)을 사용.
# - 필요하면 커널 유형(kernel), 정규화 파라미터(C), 감마(gamma) 등의 매개변수를 설정 가능.
svc = SVC() # SVM 분류 모델 객체를 생성.
# 학습 데이터를 사용하여 SVM 모델을 학습시킨다.
# - X_train: 학습용 특징 데이터 (각 샘플의 입력 값들).
# - y_train: 학습용 레이블 데이터 (각 샘플의 정답 값).
# fit() 메서드는 SVM이 학습 데이터로부터 클래스 간의 최적의 결정 경계를 학습하도록 한다.
svc.fit(X_train, y_train)
# 결과적으로 svc 객체는 학습된 SVM 모델로 업데이트되며,
# 이후에 테스트 데이터에 대한 예측(predict)이나 성능 평가(score) 등을 수행할 수 있다.
svc.fit(X_train, y_train)
-->
-->
예시 2)
# 학습된 SVM 모델(svc)을 사용하여 테스트 데이터(X_test)에 대한 예측을 수행한다.
# predict() 메서드는 입력 데이터에 대해 학습된 결정 경계를 기반으로 각 샘플의 클래스를 예측한다.
# - X_test: 테스트용 특징 데이터 (새로운 데이터 샘플들).
# - y_pred: 테스트 데이터에 대한 예측 결과(클래스 레이블)로, 각 샘플이 어떤 클래스에 속하는지 반환.
y_pred = svc.predict(X_test) # SVM 모델을 사용하여 테스트 데이터의 클래스를 예측.
# y_pred는 테스트 데이터(X_test)의 각 샘플에 대한 예측 클래스(품종 번호)를 포함한 배열로 반환된다.
y_pred
-->
array([0, 2, 2, 2, 0, 2, 0, 1, 2, 0, 2, 2, 0, 2, 0, 0, 0, 0, 1, 2, 0, 1,
0, 0, 0, 1, 0, 2, 2, 2])
예시 2-1)
# 학습된 SVM 모델의 테스트 데이터에 대한 성능을 평가하기 위해 정답률(accuracy)을 계산한다.
# accuracy_score는 사이킷런의 메트릭 함수로, 실제 레이블과 예측 레이블이 얼마나 일치하는지를 계산한다.
# accuracy_score의 주요 매개변수:
# - y_test: 테스트 데이터의 실제 레이블.
# - y_pred: 테스트 데이터의 예측 레이블.
# accuracy_score는 다음과 같이 계산된다:
# (예측이 실제 레이블과 일치한 샘플 수) / (전체 샘플 수)
# 결과 값은 0과 1 사이의 값으로 반환되며, 1에 가까울수록 더 높은 정확도를 의미한다.
print('정답률', accuracy_score(y_test, y_pred))
-->
정답률 0.9666666666666667
# 정답률(accuracy)을 출력한다.
# 출력 결과는 '정답률'이라는 문자열과 accuracy_score의 계산 결과 값으로 표시된다.
'LLM(Large Language Model)의 기초 > 머신러닝과 딥러닝' 카테고리의 다른 글
6. 서울 자전거 공유 수요 예측 데이터셋 (0) | 2025.01.08 |
---|---|
5. 주택 임대료 예측 데이터셋 (0) | 2025.01.07 |
3. 파이토치로 구현한 선형 회귀 (1) | 2025.01.06 |
2. 파이토치 프레임워크(인공지능/데이터분석) (2) | 2025.01.06 |
1. 머신러닝과 딥러닝 (2) | 2025.01.06 |