넘파이(numpy)

    넘파이는 컴퓨터가 계산하기 좋은 형태를 제공합니다. 그래서 판다스에 비해 메모리도 덜 들고 계산도 더 빠릅니다.

  • npy, npz와 같은 확장자 혹은 텍스트 파일로 입출력
  • 넘파이 배열과 판다스 형식은 상호 변환 가능
  • 넘파이는 인덱스나 칼럼명이 없음

 

import numpy as np

 

 

 

 

 

배열 생성

kitsch = np.array([['우', '리', '만', '의'],
                   ['자', '유', '로', '운'],
                   ['n', 'i', 'n', 'e'],
                   ['t', 'e', 'e', 'n']])

# 판다스로 변환시 칼럼과 인덱스 지정 가능
# pd.DataFrame(kitsch, columns=['num1', 'num2', 'num3', 'num4'], index=['cat', 'dog', 'bear'])

# 넘파이로 변환
# np.array('판다스 형식')

 

 

 

 

배열 인덱싱과 연산

 

# [행, 열] 순으로 작성합니다.
kitsch[2:3, :]
# array([['n', 'i', 'n', 'e'],
#        ['t', 'e', 'e', 'n']])


array_one = np.array([[1, 2], [3, 4]])
array_nine = np.array([[9, 8], [7, 6]])


# 사칙연산 가능
# array_one + 1  

array_one * array_nine
# array([[ 9, 16],
#        [21, 24]])

array_one @ array_nine
# array([[ 9+14,  8+12],
#        [27+28, 24+24]])  # 이해하기 쉽게 풀어씀

 

 

random 함수

np.random.randint(1, 10, n)
# 1~10까지 수를 n개 선택

np.random.choice(['cat', 'bird', 'dog', 'bear', 'zelda'], size=3, replace=False)
# 리스트 중 3개를 뽑음
# 리스트 순서로 정렬 X
# 뽑는 순서대로 나옴

 

 

 

기타

 

np.arange(1, 100, 8)  # 파이썬 range와 동일
# array([1, 8, 16, ... ])

# range의 끝이 포함되는 버전
np.linspace(1, 100, 8)
# array([1., 8., 15., 22., ...])

'머신러닝' 카테고리의 다른 글

extra [머신러닝] 판다스  (0) 2023.05.18
01 [머신러닝] 머신러닝이란?  (2) 2023.05.16

아나콘다(window)

 

https://www.anaconda.com/products/individual 

 

Free Download | Anaconda

Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

 

 

 

(VS code 확장프로그램)

  • Python
  • Python Extension Pack
  • Code Runner

 

 

(Anaconda Prompt)

# 파이썬 버전 확인
python -V

# 가상환경 설정
conda create --name 프로젝트명 python=3.8 pip
y # Proceed ( [y] / n )?

conda activate 프로젝트명  # 가상환경 시작
conda deactivate  # 가상환경 종료

# 패키지 설치
pip install tensorflow
pip install opencv-python
conda install -c conda-forge dlib
y # Proceed ( [y] / n )?

# 패키지 설치 확인
conda list

 

 

 

아나콘다 - VS code 연동

 

(VS code)

F1 → Python Select Interpreter  인터프리터 선택   아나콘다에서 생성한 가상환경 선택

 

설치한 버전이 출력되는지 확인

import cv2
import tensorflow as tf
import dlib

print(cv2.__version__)
print(tf.__version__)
print(dlib.__version__)

 

판다스(pandas)

    데이터 분석에서 가장 많이 쓰이는 라이브러리로 열이 하나면 시리즈, 둘 이상이면 데이터프레임이라고 합니다. 판다스는 사람이 읽기 쉬운 형태의 자료구조를 제공합니다.

    판다스는 SQL, 엑셀파일, CSV파일등 데이터를 읽어들이고 반대로 데이터를 파일 형식으로 만들거나 DB에 올릴 수 있습니다.

 

import pandas as pd

 

 

 

csv 파일 불러오기

url = '캐글이나 오픈엠엘 같은 사이트의 공개 데이터 url'
df = pd.read_csv(url, index_col=0)  # 0번째 컬럼을 인덱스로 지정

df
df.head()  #기본 5개 출력
df.tail()  #기본 5개 출력

 

 

 

데이터 정보 출력

df.info()
  • 데이터 행과 인덱스를 출력
  • 칼럼의 이름과 수를 출력
  • Null이 아닌 데이터의 수를 출력
  • 자료형을 출력

 

자료형  
object 텍스트와 같은 문자 형태
int 소수점이 없는 숫자
float 소수점이 있는 숫자
bool True/ False
datetime 날짜/ 시간의 자료형

 

 

 

데이터 통계 정보 출력

round(df.describe(), 0)

 

용어  
count 데이터의 개수
mean 데이터 평균값
std 데이터 표준편차(오류 범위)
% 데이터를 오름차순으로 정리해, %가 되는 지점

 

 

 

 

데이터프레임 생성

# 딕셔너리
df_dic = {'animal':['Cat', 'Dog', 'Bear'], 'age':[8, 9, 10]}
pd.DataFrame(df_dic)

# 리스트
pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], 
columns=['num1', 'num2', 'num3', 'num4'], index=['cat', 'dog', 'bear'])

# 출력
#     num1  num2  num3  num4
# cat   1    2    3    4
# dog   5    6    7    8
# bear  9    10   11   12

 

 

 

 

인덱싱

행과 열 인덱싱

# 열(칼럼)
# 하나
df['num1']
# 여러개
df[['num1', 'num2', 'num3', 'num4']]


# 행
# 하나
df.loc['cat']
# 여러개
df.loc[['cat', 'dog', 'bear']] # or ['cat':'bear']

# 행의 인덱스로 인덱싱
df.iloc[[1, 2]]
# 출력
#     num1  num2  num3  num4
# dog   5    6    7    8
# bear  9    10   11   12


# 열과 행 인덱싱
df.iloc[0:1, 2:3]
# 출력
#     num3  num4
# cat   3    4
# dog   7    8

 

 

행렬 제거하기

df.drop(['num2', 'num3'], axis=1)

# axis X 행에서 제거
# axis O 열에서 제거

 

 

인덱스 변경

# 기존 인덱스 대체
df.reset_index(drop=True)
#     num1  num2  num3  num4
# 1   1    2    3    4
# 2   5    6    7    8
# 3   9    10   11   12

# 인덱스 삽입
df.set_index('num1')
# (num1)  num2  num3  num4
#   1    2    3    4
#   5    6    7    8
#   9    10   11   12

 

 

 

 

 

변수 계산

# 합과 평균을 함께 보기
df.aggregate(['sum', 'mean'])

# 모든 열 연산
df[['Age', 'Fare']].mean()

 

데이터의 개수 count( )
sum( )
평균 mean( )
중윗값 median( )
분산 var( )
표준편차 std( )

 

 

 

그룹별 계산

# 여러가지 한 번에 계산
df.groupby('class').agg(['count','mean'])

# 클래스 변수 확인
df['class'].unique()
# 클래스 변수 개수 확인
df['class'].nunique()
# 클래스별 데이터 개수
df['class'].value_counts()

 

 

데이터프레임 합치기

 

merge

  • 특정 열을 기준으로 데이터 결합
first = pd.read_csv('데이터')
second = pd.read_csv('데이터')


# 교차 결합
first.merge(second)

# 키값을 지정해 결함
first.merge(second, on = {'키값이 될 변수'})

# 전체 결합
# 데이터가 없다면 NaN(빈값)으로 표시
first.merge(second, how='outer')

# first에 second 결합
first.merge(second, how='first')

 

 

Join

  • 동일한 이름의 열(칼럼)이 중복되면 에러
  • 인덱스를 기준으로 데이터 결합
# 중복 칼럼을 버리고 합치기
first.drop('중복칼럼', axis=1).join(second.drop('중복칼럼', axis=1))

# 중복 칼럼을 기준으로 합치기
first = first.set_index('중복칼럼')
second = second.set_index('중복칼럼')
first.join(second)

# inner 조인(교차결합)
first.join(second, how='inner')

 

 

Concat

  • 기본은 행을 기준으로 결함, axis를 통해 열을 기준으로 결합
  • 내부, 외부 조인만 가능
pd.concat([first, second], axis=1)

 

'머신러닝' 카테고리의 다른 글

extra [머신러닝] 넘파이  (1) 2023.05.19
01 [머신러닝] 머신러닝이란?  (2) 2023.05.16

사전 준비

가입 : https://www.kaggle.com/

 

 

 

머신러닝이란?

 

알고리즘이란?

  • 💡  머신러닝에 들어가기에 앞서 알고리즘이란 수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것, 계산을 실행하기 위한 단계적 절차
  •  

    • 문제 A. 시험 전 날 커피를 몇 잔 마시면, 다음 날 시험에서 몇 점을 받을 수 있을까?

선형, 비선형

    정확히 말하면 딥러닝은 머신러닝 방법 중 하나입니다. 머신러닝(ML, 기계학습)이라는 포괄적인 범위 안에 딥러닝(Deep learning 심층 학습)이 포함되어 있죠. 딥러닝은 인공 신경망을 기반으로 한 특수한 머신러닝 기법으로, 주로 자연어 처리, 이미지, 비디오 분석 같은 목적으로 사용됩니다. 딥러닝은 입력층과 출력층 사이에 은닉층을 두고 작동시킨다는 특징이 있습니다.

     연구 초반에는 MLP(Multi-Layer Perceptron)이라고 불렸으나 사람들의 유행을 타기 시작하면서 어감이 좋은 딥러닝으로 굳어지게 되었습니다. 요즘들어 우리가 말하는 인공지능과 머신러닝이라고 하는 것은, 여러 방법 중에서 월등하게 성능이 좋은 딥러닝을 말합니다. 최근 10년간 모든 학문 분야 중 가장 많은 연구가 이루어졌고 덕분에 파이썬이라는 언어가 덩달아 전성기를 맞게 되었죠.

 

인공지능과 머신러닝과 딥러닝의 관계

 

 

 

 

 

 

 

머신러닝 학습 방법

 

  • 💡 머신러닝은 크게 3가지로 분류해요. 바로 지도/비지도/강화 학습이죠. 각각의 개념과 차이점에 대해서 알아볼까요?

 

지도 학습(Supervised learning)

    정답을 알려주면서 학습시키는 방법을 말합니다. 위에서 배웠던 회귀와 분류 문제가 대표적인 지도 학습에 속합니다. 지도 학습은 기계에게 입력값과 출력값을 전부 보여주면서 학습시키죠. 단, 정답(출력값)이 없으면 이 방법으로 학습시킬 수 없습니다.

    여러분이 회사에서 머신러닝 엔지니어로 근무한다면 회사에서 필요로 하는 문제를 풀기 위해 많은 데이터를 필요로 할 겁니다. 근데 대부분 회사에는 데이터가 없거나 혹은 입력값에 해당하는 데이터는 있어도 출력값(정답)에 해당하는 데이터가 없는 경우가 비일비재합니다. 따라서 입력값에 정답을 하나씩 입력해주는 작업을 라벨링(Labeling, 레이블링) 또는 어노테이션(Annotation)이라고 합니다.

 

 

 

비지도 학습 (Unsupervised learning)

 

 

 

    정답을 알려주지 않고 군집화(Clustering)하는 방법을 말합니다. 비지도 학습은 그룹핑 알고리즘(Grouping algorithm)의 성격을 띄고 있습니다. 예를 들어 음악을 분석하여 장르를 구분하는 문제를 푼다고 가정해봅시다.

 

    ❓ 음원 파일을 분석하여 장르를 팝, 락, 클래식, 댄스로 나누는 문제

 

    우리가 가지고 있는 데이터에 입력값(음원파일)과 출력값(장르) 둘 다 존재한다면 우리는 지도 학습으로 이 문제를 풀 수 있지만 출력값에 해당하는 장르 데이터가 없을 때 비지도 학습 방법을 사용합니다. 비지도 학습 방법은 라벨(Label 또는 Class)이 없는 데이터를 가지고 문제를 풀어야 할 때 큰 힘을 발휘하죠!

 

    ☝ 우리에게는 수 백만개의 음원 파일이 있는데, 각 음원 파일에 대한 장르 데이터는 없어. 그러니까 기계에게 음원 파일을 들려주고 알아서 비슷한 것끼리 분류하게 해보자! 분류한 것에 나중에 명칭만 입력해 줄게.

비지도 학습의 종류

 

 

 

 

 

강화 학습(Reinforcement learning)

 

    주어진 데이터없이 실행과 오류를 반복하면서 학습하는 방법(알파고를 탄생시킨 머신러닝 방법!!)을 말합니다. 행동 심리학에서 나온 이론으로 분류할 수 있는 데이터가 존재하지 않거나, 데이터가 있어도 정답이 따로 정해져 있지 않고, 자신이 한 행동에 대해 보상(Reward)를 받으며 학습하는 것을 말합니다.

  • 강화학습의 개념
    • 에이전트(Agent)
    • 환경(Environment)
    • 상태(State)
    • 행동(Action)
    • 보상(Reward)

    게임을 예로 들면 게임의 규칙을 따로 입력하지 않고 자신(Agent)이 게임 룰(Environment)에서 현재 상태(State)에서 높은 점수(Reward)를 얻는 방법을 찾아가며 행동(Action)하는 학습 방법으로 특정 학습 횟수를 초과하면 높은 점수(Reward)를 획득할 수 있는 전략이 형성되게 됩니다. 단, 행동(Action)을 위한 행동 목록(방향키, 버튼)등은 사전에 정의가 되어야 합니다.

 

 

 

 

지도학습 회귀와 분류

  • 💡 머신러닝에서 문제를 풀 때, 해답을 내는 방법을 크게 회귀 또는 분류로 나눌 수 있습니다. 각각이 무엇을 의미하는지 배워봅시다!

 

회귀 (Regression)

 

    ❓ 사람의 얼굴 사진을 보고 몇 살인지 예측하는 문제

 

    모든 문제를 풀기 위해서는 먼저 입력값(Input)과 출력값(Output)을 정의해야 합니다.

    • 이 문제에서 입력값은 [얼굴 사진]이 되고 출력값은 [예측한 나이]가 됩니다.
    • 나이의 값은 연속적이죠. 이런 식으로 출력값이 연속적인 소수점으로 예측하게 하도록 푸는 방법을 회귀라고 합니다.
    • 이런 연속적인 문제는 보통 회귀로 푼다.
    • 머신러닝에서는 보통 출력값을 소수점(float)으로 표현합니다.

 

 

분류 (Classification)

 

    ❓ 대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 이수 여부(Pass or fail)를 예측하는 문제

    • 이 문제는 pass 와  fail 중간이 연속적이지 않으므로 분류입니다.
    • 이런 분류 종류를 클래스(class)라고 합니다.
    • 입력값은 [공부한 시간] 그리고 출력값은 [이수 여부]가 됩니다.
    • 우리는 이수 여부를 0, 1 이라는 이진 클래스(Binary class)로 나눌 수 있습니다. 0이면 미이수(Fail), 1이면 이수(Pass) 이런식으로요. 이런 경우를 이진 분류(Binary classification)이라고 부릅니다

                * 이진 클래스의 클래스는 나눈 값을 뜻합니다.

 

 

    ❓ 대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 성적(A, B, C, D, F)을 예측하는 문제

    • 이 방법을 다중 분류(Multi-class classification, Multi-label classification)라고 부릅니다.

 

 

회귀와 분류 둘 다 가능한 문제

 

    ❓ 사람의 얼굴 사진을 보고 몇 살인지 예측하는 문제 (분류)

    • 만약 나이를 범위로 쪼개어 생각하면 어떨까요?
나이 범위 클래스
0 - 9세 0
10 - 19세 1
...  
90 - 99세 9
100 - 109세 10

 

 

 

머신러닝 프로세스

    ① 데이터 수집  →  ② 데이터 전처리  →  ③ 모델 학습  →  ④ 모델 평가  →  ⑤ 모델 베포

 

 

'머신러닝' 카테고리의 다른 글

extra [머신러닝] 넘파이  (1) 2023.05.19
extra [머신러닝] 판다스  (0) 2023.05.18

+ Recent posts