-
머신러닝 4/ 코드카타 / 판다스[스파르타코딩클럽]데이터분석 과정/TIL,WIL 2024. 2. 1. 20:46
머신러닝
- 의사결정나무
나무 구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석방법
- 루트 노드 : 의사결정나무의 시작점
- 리프 노드 : 루트 노트로부터 파생된 중간 혹은 최종 노드
- 분류기준
- 불순도 : 지니 계수(0~1)
- 샘플 : 해당 노드의 샘플 개수
- 값 : Y변수에 대한 배열
- 클래스 : 가장 많은 샘플을 차지하는 클래스 표현
sklearn.tree.DecisionTreeClassifier sklearn.tree.DecisionTreeRegressor
- 랜덤 포레스트 이론
- 배깅 : 데이터 부족 해결
- Bootstrapping : 데이터를 복원 추출해서 유사하지만 다른 데이터 집단을 생성
- Aggregating : 데이터의 예측, 분류 결과를 합친 것
- Ensemble : 여러 개의 모델을 만들어 결과를 합치는 것
sklearn.ensemble.RandomForestClassifer sklearn.ensemble.RandomForestRegressor
- 최근접 이웃
주변의 데이터를 보고 내가 알고 싶은 데이터를 예측
-파라미터 : 머신러닝 모델이 학습 과정에서 추정하는 내부변수이며 자동으로 결정되는 값
-하이퍼 파라미터 : 외부 구성변수이며 모델 학습과정이나 구조에 영향을 미침
-유클리드 거리 : 두 점의 좌표가 주어지면 피타고라스의 정리로 거리를 구할 수 있음
sklearn.neighbors.KNeighborsClassifier sklearn.neighbors.KNeighborsRegressor
- 부스팅 알고리즘
여러 개의 약한 학습기를 순차적으로 학습하면서 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선해가는 방식
- Gradient Boosting Model
-가중치 업데이트를 경사하강법 방법을 통해 진행
sklearn.ensemble.GradientBoostingClassifier sklearn.ensemble.GradientBoostingRegressor
- XGBoost
-트리기반 앙상블 기법으로, 가장 각광받으며 Kaggle의 상위 알고리즘으로 병렬학습이 가능해 속도가 빠름
xgboost.XGBRegressor xgboost.XGBRegressor
- LightGBM
-가장 각광 받는 알고리즘
-학습시간이 짧고 메모리 사용량이 작음
-작은 데이터의 경우 과적합 발생
lightgbm.LGBMClassifier lightgbm.LGBMRegressor
- 비지도 학습
답을 알려주지 않고 데이터 간 유사성을 이용해서 답을 지정하는 방법
-K0Means Clustering
- K개 군집 수 설정
- 임의의 중심을 선정
- 해당 중심점과 거리가 가까운 데이터를 그룹화
- 데이터의 그룹의 무게 중심으로 중심점을 이동
- 중심점을 이동했기 때문에 다시 거리가 가까운 데이터를 그룹화
sklearn.cluster.KMeans n_cluster : 군집화 갯수 max_iter: 최대 반복 횟수 labels_: 각 데이터 포인트가 속한 군집 중심점 레이블 cluster_centers: 각 군집 중심점의 좌표
- 군집평가 지표
- 실루엣 계수
- 군집 간의 거리가 얼마나 효율적으로 분리되어 있는지 측정
- 실루엣 값이 높을수록 좋음
sklearn.metrics.sihouette_score: 전제 데이터의 실루엣 계수 평균 값 반환 X: 데이터 세트 labels: 레이블 metrics: 측정 기준 기본은 euclidean
- 고객 세그멘테이션
다양한 기준으로 고객을 분류하는 기법
- 딥러닝
자연어 처리와 이미지 처리에 뛰어남
- 가중치 구하기
-경사 하강법 : 모델의 손실 함수를 최소화하기 위해 모델의 가중치를 반복적으로 조정하는 최적화 알고리즘
- 활성화 함수
- 히든 레이어
- 데이터를 비선형적으로 변환함과 동시에 데이터의 고차원적 특성을 학습하기 위해 중간에 입력과 결과 외의 추가하게 되는 숨은 층
- 순전파 : 입력 데이터가 신경망의 각 층을 통과하면서 최종 출력까지 생성되는 과정
- 역전파 : 신경망의 오류를 역방향으로 전파하여 각 층의 가중치를 조절하는 과정
-Input Layer : 주어진 데이터가 벡터의 형태로 입력
-Hidden Layer : Input과 Output을 매개하는 레이어로 이를 통해 비선형 문제를 해결할 수 있게 됨
-Output Layer : 최종적으로 도착하게 되는 Layer
- epoch
전체 데이터가 신경망을 통과하는 한 번의 사이클
- batch
전체 훈련 데이터 셋을 일정한 크기의 소 그룹으로 나눈 것
- iteration
전체 훈련 데이터 셋을 여러 개로 나누었을 때 배치가 학습되는 횟수
tensorflow.keras.model.Sequential model.add: 모델에 대한 새로운 층을 추가함 unit model.compile: 모델 구조를 컴파일하며 학습 과정을 설정 optimizer : 최적화 방법, Gradient Descent 종류 선택 loss : 학습 중 손실 함수 설정 회귀: mean_squared_error(회귀) 분류: categorical_crossentropy metrics : 평가척도 mse: Mean Squared Error acc : 정확도 f1_score: f1 score model.fit: 모델을 훈련 시키는 과정 epochs: 전체 훈련 데이터 셋에 대해 학습을 반복하는 횟수 model.summary(): 모델의 구조를 요약하여 출력 tensorflow.keras.model.Dense: 완전 연결된 층 unit: 층에 있는 유닛의 수. 출력에 대한 차원 개수 input_shape:1번째 층에만 필요하면 입력데이터의 형태를 지정 model.evaluate: 테스트 데이터를 사용하여 평가 model.predict: 새로운 데이터에 대해서 예측 수행
- 자연어 처리
인간의 언어를 데이터화 하는 것
- LLM : GPT-4, PaLM2, LlaMA
- 이미지 처리
SQL 코드카타
입양 시각 구하기(1)
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보기 위해 9시부터 19시59분까지 각 시간대별로 입양시 몇 건이나 발생했는지 조회하는 SQL문 작성- 시간 : hour
- 9시~19시 : between 9 and 19
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT FROM ANIMAL_OUTS WHERE HOUR(DATETIME) BETWEEN 9 AND 19 GROUP BY HOUR ORDER BY HOUR;
Classes More Than 5 Students
5명 이상있는 반을 구하는 SQL문- 5명 이상 있는 : count(student) >=5
- 반 구하기인데 학생 조건 -> group by -> having
SELECT class FROM Courses GROUP BY class HAVING COUNT(student) >=5;
Revising Aggregations - The Sum Function
District가 california인 도시의 인구의 합- 인구의 합 : sum(population)
- District가 california : district= 'california'
select sum(population) from city where district = 'California';
파이썬 코드카타
카드 뭉치
문자열로 이루어진 배열 cards1, cards2와 원하는 단어 배열 goal이 매개변수로 주어질 때,
cards1과 cards2에 적힌 단어들로 goal를 만들 있다면 "Yes"를, 만들 수 없다면 "No"를 return하는 solution 함수를 완성- for문 사용
- card1과 for문에서 꺼낸게 같다면 : if
- 만들기 : pop
- card2과 for문에서 꺼낸게 같다면 : if
- 아닌 경우 NO
def solution(cards1, cards2, goal): for i in goal: if cards1 and i == cards1[0]: cards1.pop(0) elif cards2 and i == cards2[0]: cards2.pop(0) else: return 'No' return 'Yes'
과일장수
사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과
사과의 최대 점수 k , 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score
과일 장수가 얻을 수 있는 최대 이익을 return하는 solution 함수를 완성- 사과들의 점수 내림차순 : reverse = True
- m개씩 구성 -> m개 단위로 자르기
- 작은 값 * m을 더해주
def solution(k, m, score): answer = 0 #사과들의 점수 내림차순 score = sorted(score, reverse = True) #m개씩 구성 - > m개 단위로 자르기 #작은 값 * m 더하기 for i in range(0, len(score),m): b = score[i:i+m] if len(b) == m: answer += min(b) * m return answer
판다스
- groupby() : 데이터를 피붓팅하여 통계량을 볼 수 있도록 도와주면서, 특정 조건에 맞게 전처리
#1개 컬럼 df.groupby(기준).mean() #2개 이상의 컬럼 df.groupby([기준1, 기준2]).mean() #1개의 특정 컬럼에 대한 결과 도출 df.groupby([기준1, 기준2])[기준3].mean()
- reset_index() : 그룹핑된 데이터프레임의 index를 초기화
- agg() : 다중 통계 함수
- pivot_table() : 특정 조건에 따라 행과 열으 기준으로 데이터를 펼쳐서 그에 대한 통계량 볼 때 활용
#index에 그룹 표기 df.pivot_table(index='who', values='survived') # columns에 그룹을 표기 df.pivot_table(columns='who', values='survived') #다중 그룹에 대한 단일 컬럼 결과 df.pivot_table(index=['who', 'pclass'], values='survived') #index에 컬럼 중첩 X df.pivot_table(index='who', columns='pclass', values='survived') #다중 통계함수 적용 df.pivot_table(index='who', columns='pclass', values='survived', aggfunc=['sum', 'mean'])
- apply() 데이터 전처리시 많이 활용
who에서 man -> 남자
woman -> 여자
child -> 아이- apply() -> 함수 없이 lambda로 가능
df['survived'].apply(lambda x: '생존' if x == 1 else '사망')
'[스파르타코딩클럽]데이터분석 과정 > TIL,WIL' 카테고리의 다른 글
KDT 실무형 데이터 분석가 양성과정 7주차 (0) 2024.02.02 머신러닝 5/ 코드카타 / pandas (0) 2024.02.02 머신러닝 3 / 코드카타 / 판다스 (1) 2024.01.31 머신러닝 2 / 코드카타 / 판다스 (1) 2024.01.30 머신러닝 1 / 코드카타 / 판다스 (1) 2024.01.29