기타/Python

250710_파이썬(표준라이브러리), 머신러닝(선형회귀, 랜덤포레스트 복습)

baektree 2025. 7. 10. 21:04

요약/나만의 인사이트

  • .split() : 문자열을 구분자로 나눠 리스트에 하나씩 담기
text = 'banana apple kiwi pineapple orange'
answer = text.split() #()안에 아무것도 없으면 공백 기준으로 나눠서 리스트에 담음
print(answer) #['banana', 'apple', 'kiwi', 'pineapple', 'orange']
  • 머신러닝 순서
    1. 라이브러리 import
    2. 변수선언(X - 다차원(df)) (y -1차원(serise))
    3. 학습
    4. 예측
    5. 평가
  • 머신러닝을 하려면 모든 문자는 숫자로 변환시켜줘야 한다. (컴퓨터가 읽을 수 있도록)

새롭게 알게 된 것

SOL MOD 함수
  • 개념: 두 숫자를 나누었을 때 발생하는 나머지를 반환하는 함수 MOD(10, 3) = 1
  • 활용: 홀수인 아이디만 조회 WHERE MODE(ID, 2)=1
  • 참고: MOD(Modulo) : 나머지 연산
머신러닝1(선형회귀)
  • 분야별 통계와 머신러닝의 활용
  • 선형회귀(선 / 하나의 트렌드(선)으로 돌아간다.)
머신러닝2(랜덤포레스트)
  • 분류 - 카테고리를 맞추는 것
  • 랜덤포레스트 아이디어 - 의사결정 나무 (if-else 조건문과 같음)
  • 의사결정나무는 트리 모양이 매번 실행될 때 마다 달라짐
  • 복원추출(꺼냈다가 다시 확인하고 넣기)
  • 랜덤 포레스트 - 복원추출, 표본 여러개, 모델링, 다수결원칙 - 즉 부트스트랩핑 + 어그리게이깅 = 앙상블(배깅)
  • 랜덤 포레스트 성능평가 - 정확도, 정밀도, 재현율, f1-score
  • 인코딩은 컴퓨터가 이해할 수 있는 숫자로 변환하는 것
  • 범주형 데이터는 무조건 인코딩이 필요하다.
  • 인코딩 종류는 레이블 인코딩, 원핫인코딩 2가지 이다.
  • 레이블인코딩은 순서가 있는 자료형에서 (사이즈, 성적)
  • 원핫인코딩은 순서가 없는 자료형에서 (지역, 등) 하면 된다.
파이썬
용어정리
  • 모듈: 변수, 함수 클래스 등을 모두 모아둔 py파일 (ex 수학 공식이 담긴 모듈)
  • 패키지: 여러 모듈을 묶은 폴더 (ex 수학. 과학 모듈을 모은 이과 패키지)
  • 라이브러리: 여러 모듈/패키지를 모아 제공하는 외부 기능 모음집 ( ex 이과, 문과 패키지 모음집)
  • 프레임워크: 다 합쳐진 하나의 간단한 서비스 정도의 규모
# 표준 라이브러리 -> python 설치하면 자동으로 설치 되는 것
# 외부 라이브러리 -> pip이나 다운로드를 통해 설치하는 것 (ex 판다스)
 
defaultdict
  • 딕셔너리의 특별한 버전
  • 일반 딕셔너리는 키가 없으면 오류(KeyError)가 남
  • defaultdict은 키가 없으면 자동으로 기본값을 만들어서 넣어줌.
예제

문제 1 (defaultdict(list))

설명: 여러 학생의 과목별 점수가 주어집니다.

과목별로 점수 리스트를 저장하는 딕셔너리를 만드세요.

  • 키가 없으면 자동으로 빈리스트가 생성해서, 사용자가 그 리스트에 값을 추가할 수 있게 해준다.
scores = [('math', 90), ('eng', 80), ('math', 70), ('eng', 95), ('hist', 85)]

from collections import defaultdict
d = defaultdict(list) #값이 없으면 빈 리스트를 자동 생성
for key, value in scores:
		d[key].append(value)
print(d)

#defaultdict(<class 'list'>, {'math': [90, 70], 'eng': [80, 95], 'hist': [85]})

문제 2 (defaultdict(int))

설명: 과일별 판매 수량 리스트가 주어집니다.

과일별 총 판매 수량을 구하세요.

  • 키가 없으면 자동으로 0이 할당되고, 여기에 값을 누적해서 더한다.
sales = [('apple', 3), ('banana', 2), ('apple', 4), ('banana', 1), ('kiwi', 5)]

from collections import defaultdict
d = defaultdict(int)
for key, value in sales:
    d[key] += value # += 연산자로 누적하기
print(d) #{'apple': 7, 'banana': 3, 'kiwi': 5})

문제 3 (defaultdict(set))

설명: 각 학생이 들은 과목 리스트가 주어집니다.

과목별로 수강하는 학생 이름을 집합(set)으로 모으세요.

  • 값이 없으면 빈 set 형성
students = [('Alice', 'math'), ('Bob', 'eng'), ('Alice', 'eng'), ('Charlie', 'math'), ('Bob', 'math')]

from collections import defaultdict
d = defaultdict(set) #값이 없으면 빈 set 형성
for student, subject in students: #변수 2개로 자동분해 = 튜플 언팩킹 (리스트 안에 튜플이 여러개 있어도 언팩킹 할 수 있다.)
	d[subject].add(student) #과목별로 학생 이름을 set에 추가
print(d) # {'math': {'Alice', 'Charlie', 'Bob'}, 'eng': {'Bob', 'Alice'}}

 

다음에 적용해 볼 것

 
sklearn 정리