>

TIL

6주차 Day 2. 빅데이터, 인공지능

ekdud 2024. 7. 30. 20:45

📑

     

    빅데이터

    : 다음의 세 가지 특성을 띠어야 함.

    1. 규모 - 굉장히 방대한 양의 유의미한 데이터.

    2. 속도 - 데이터의 생성 및 처리 속도가 매우 빠름.

    3. 다양성 - 데이터의 종류뿐만 아니라 형식이 다양.

     

     

    데이터의 종류

    - 정형 데이터: 정량적이고 수치로 확인할 수 있거나 구조를 가지고 있는 데이터. 예) 시간, 시계열 데이터, 금융 데이터, ID/PW, 온도, 카드번호 등.

    - 비정형 데이터: 수치적으로 확인할 수 없거나 구조를 띠지 않는 데이터. 예) 그림, 소리, 영상 등.

    - 반정형 데이터: 정형데이터와 비정형 데이터의 성격을 둘 다 가지는 데이터. 예) DICOM 파일, JSON, XML, 스마트폰에서 위치 값을 함께 저장하는 사진 등.

     

     

    데이터 전처리

    : 데이터를 AI에게 학습시키기 전이나 분석하기 전에 적합한 형태로 가공하는 작업. 데이터를 이용한 결과물에 대한 품질을 향상하기 위해 반드시 필요.

     

     

    데이터 수집 계획

    - 빅데이터를 구성하기 위해 명확한 수집 계획이 필요.

    데이터 식별 및 선택 → 데이터 수집/저장 방법 결정 → 데이터 수집 데이터 저장 → 데이터 정제 → 데이터 구조화 → 데이터 전처리 → 빅데이터 구성

     

     

    빅데이터 기본 개념

    • 빅데이터를 활용하기 위한 기술 및 도구

    데이터 저장: Hadoop, HDFS, Amazon S3

    데이터 처리: Apache Spark, Apache Flink, Apache Storm

    데이터 분석: R, Python(pandas, NumPy, SciPy), SAS, SPSS

    데이터 시각화: Tableau, Power BI, D3.js

    데이터베이스: NoSQL 데이터베이스(MongoDB, Cassandra, HBase), NewSQL 데이터베이스(Google Spanner, CockroachDB)

    *파이썬으로 데이터 처리, 분석, 시각화까지도 가능함.

     

    메타데이터

    다른 정보에 대한 정보를 의미. 보통 어떤 정보의 근원에 대한 정보를 담고 있음.

     

    • 회귀 분석: 두 개 이상의 변수 간의 관계를 분석하는 방법.

    - 단순 회귀 분석: 하나의 독립 변수와 하나의 종속 변수 간의 관계 분석

    - 다중 회귀 분석: 두 개 이상의 독립 변수와 하나의 종속 변수 간의 관계를 분석

    - 다항 회귀 분석: 독립 변수와 종속 변수 간의 비선형 관계를 분석

    - 로지스틱 회귀 분석

    : 수학을 사용하여 두 데이터 요인 간의 관계를 찾는 데이터 분석 기법. 다른 요인을 기반으로 이러한 요인 중 하나의 값을 예측. 종속 변수가 이진형(두 가지 범주) 일 때 사용. 로지스틱 회귀 모델에는 메모리 및 처리 성능과 같은 계산 용량이 덜 필요하기 때문에 대량의 데이터를 고속으로 처리할 수 있음. 또한 다른 ML 기법보다 수학적으로 덜 복잡하며 데이터를 전처리하는 데에도 사용할 수 있음. 다른 데이터 분석 기법을 사용할 때보다, 개발자에게 내부 소프트웨어 프로세스에 대한 더 높은 가시성이 제공되며, 계산이 덜 복잡하기 때문에 문제 해결 및 오류 수정도 더 쉬움. 로지스틱 회귀를 사용하여 구축된 ML 모델은 조직이 비즈니스 데이터에서 유용한 인사이트를 얻는 데 도움이 됨. 이러한 인사이트를 예측 분석에 사용하여 운영 비용을 절감하고 효율성을 높이며 더 빠르게 규모를 조정할 수 있음.

     

    로지스틱 회귀 분석은 수학에서 로지스틱 함수 또는 로짓 함수를 x와 y 사이의 방정식으로 사용하는 통계 모델. 로짓 함수는 y를 x의 sigmoid 함수로 mapping함. 

     

     

     

     

    군집 분석

    데이터를 유사한 특성을 가진 군집으로 나누기 위한 분석 방법.

     

    IoT(Internet of Things, 사물인터넷)

    인터넷을 통해 다양한 물리적 장치들이 서로 연결되어 데이터를 주고받으며 상호작용하는 시스템.

     

    로드밸런싱: 부하가 집중되는 것을 방지하기 위해 여러 서버에 네트워크 트래픽을 분산시키는 기술.

    데이터 레이크: 원시 데이터를 그대로 저장하는 시스템(hadoop같은 것들).

    데이터 거버넌스: 데이터의 신뢰성, 사용성, 보안성을 보장하기 위해 관리하는 모든 작업.

    • 데이터 웨어하우스: 대량의 데이터를 통합, 저장하여 분석하는 시스템.

     


    AI (인공지능)

    • Deep Learning

    : 인공지능을 학습시키거나 문제를 해결하기 위한 핵심 사고방식(알고리즘)

    - Neuron(뉴런): 신경망의 기본 단위로 입력을 받아 가중치를 적용하고 활성화 함수를 통해 출력을 생성

    - Layer(층): 뉴런들이 모여있는 층으로 보통 입력층, 은닉층, 출력층으로 구성.

    - Weight(가중치): 뉴런에서 다음 뉴런으로 넘길 때 중요도를 적용하기 위한 매개변수.

    - Model(모델): 보통 인공지능 분야에서의 모델은 어떤 AI나 신경망 등 대상체를 의미. 

    - ANN(Artificail Neural Network): 인공신경망. 여러 뉴런으로 이루어진 인공 신경망.

    - DNN(Deep Neural Network): 심층신경망. 기존의 ANN의 단점을 해결하기 위해 은닉층을 통해(은닉층을 더 많이!) 더 깊은 신경망 구조를 갖는 신경망.

    - CNN(Convolution Neural Network): 합성곱신경망. 특징을 추출하고 패턴을 파악하는 데 우수한 신경망.

    - RNN(Recurrent Neural Network): 순회신경망. 시간적인 특성을 함께 학습하고 적용하기 위한 신경망.

    - 다층 퍼셉트론: Multilayer Perceptron, MLP. 층이 여러 개인 신경망

    - 역전파 알고리즘: Backpropagation. 신경망의 가중치를 업데이트하여 오차를 최소화하는 방법

    - 생성적 적대 신경망: Generative Adversarial Networks, GAN. 새로운 데이터를 생성하기 위한 신경망.

     

    • Machine learning

    : 기계학습. 딥러닝으로 기계가 스스로 반복하여 학습하는 것. 

    - 지도학습: 입력 데이터와 정답을 함께 주고 학습시킴. (이미지 분류, 스팸 이메일 탐지, 주식 가격 예측, 코인 가격 예측 등)

    - 비지도학습: 입력 데이터만 주어지고 정답이 없는 상태에서 데이터의 패턴이나 구조를 찾는 방식.(구매 패턴에 따른 고객 세분화, 이상 탐지, 차원 축소 등)

    - 강화학습: 시행착오를 통해 보상을 최대화하기 위해 학습하는 방식. (게임 AI, 로봇제어, 자율 주행 차량 등)

    - 반지도학습: 일부 데이터에 대해 분류와 정답이 존재. 나머지 일부는 없는 상태로 학습. (데이터 라벨링 등)

     

    • AI

    : Artificial Intelligence. 딥러닝 알고리즘을 통해 머신러닝이란 프로그램을 의미.

    - 약인공지능 (Narrow AI or Weak AI): 특정 직업이나 문제를 해결하는 데 특화된 AI

    - 강인공지능 (General AI or Strong AI, AGI): 인간과 유사한 수준의 지능을 가지고 다양한 작업을 수행할 수 있는 인공지능 모델.

    - 초인공지능 (Suprerintelligent AI): 인간의 지능을 초월하는 AI. 아직은 이론적인 단계.

    - 대형 언어 모델 (Large Language Model, LLM): 많은 양의 텍스트 데이터를 학습하여 언어 이해와 생성 능력을 갖춘 인공지능 모델. (ChatGPT, BERT, T5, LLaMA 등)

     

     

    ML을 위한 파이썬 라이브러리

    - NumPy : 고성능 수치 계산을 위한 라이브러리. 대규모 다차원 배열과 행렬 연산에 최적화되어 있음. 데이터 과학과 머신러닝에서 데이터를 효율적으로 처리하기 위한 기본적인 도구.

    - Pandas : 데이터 분석과 조작을 위한 라이브러리. CSV, 엑셀 파일 등 다양한 형태의 데이터를 쉽게 처리할 수 있게 해 줌. 데이터 전처리와 탐색적 데이터 분석(EDA)에 매우 유용. ( 데이터 전처리와 간단한 머신러닝 모델을 구축하는 등.. )

    - Scikit-learn : 머신러닝 알고리즘을 구현한 라이브러리.  분류, 회귀, 클러스터링 등 다양한 머신러닝 작업을 지원. 사용하기 쉬운 API와 광범위한 문서로 많은 개발자와 연구자에게 선호됨.  ( 데이터 전처리와 간단한 머신러닝 모델을 구축하는 등.. )

    - TensorFlow / PyTorch : 딥러닝 프로젝트를 위한 라이브러리. 복잡한 신경망 모델을 구축하고 학습시키는 데 사용. 강력한 기능과 유연성을 제공. ( 복잡한 딥러닝 모델을 개발하는 경우 )

    - Matplotlib / Seaborn : 시각화 라이브러리. 데이터 분석 결과를 시각적으로 표현하는 데 도움을 줌.

     

     


     

    ALGORITHM CODE KATA

     

    Ⅰ. 얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다. 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해 주세요.  (school.programmers.co.kr)

     

       < 제한사항 >

    • 5 ≤ players의 길이 ≤ 50,000
    • players[i]는 i번째 선수의 이름을 의미합니다.
    • players의 원소들은 알파벳 소문자로만 이루어져 있습니다.
    • players에는 중복된 값이 들어가 있지 않습니다.
    • 3 ≤ players[i]의 길이 ≤ 10
    • 2 ≤ callings의 길이 ≤ 1,000,000
    • callings는 players의 원소들로만 이루어져 있습니다.
    • 경주 진행중 1등인 선수의 이름은 불리지 않습니다.
    def solution(players, callings):
        # players 배열 -> 딕셔너리.
        player_dict = {player: idx for idx, player in enumerate(players)}
        
        for i in callings:
            # 추월한 선수의 현재 인덱스.
            idx = player_dict[i]
    
            # 바로 앞 순위의 선수와 키 값 변경.
            players[idx], players[idx - 1] = players[idx - 1], players[idx]
    
            # 딕셔너리의 인덱스 업데이트.
            player_dict[players[idx]] = idx
            player_dict[players[idx - 1]] = idx - 1
        
        return players

     

    리스트를 이용하는 경우 시간초과 발생 ↴

    def solution(players, callings):    
        for i in callings:
            a = players.index(i)
            players[a], players[a-1] = players[a-1], players[a]
            
        return players