본문 바로가기

Programming/Machine Learning

(36)
머신러닝 모델 - 간단한 요약 최근접 이웃 - 작은 데이터셋일 경우, 기본 모델로서 좋고 설명하기 쉬움. 선형 모델 - 첫 번째로 시도할 알고리즘. - 대용량 데이터셋 가능. - 고차원 데이터에 가능. 나이브 베이즈 - 분류만 가능. - 선형 모델보다 훨씬 빠름. - 대용량 데이터셋과 고차원 데이터에 가능. - 선형 모델보다 덜 정확함. 결정 트리 - 매우 빠름. - 데이터 스케일 조정이 필요 없음. - 시각화하기 좋고 설명하기 쉬움. 랜덤 포레스트 - 결정 트리 하나보다 거의 항상 좋은 성능을 냄. - 매우 안정적이고 강력함. - 데이터스케일 조정 필요 없음. - 고차원 희소 데이터에는 잘 안맞음. 그래디언트 부스팅 결정 트리 - 랜덤 포레스트보다 조금 더 성능이 좋음. - 랜덤 포레스트보다 학습은 느리나 예측은 빠르고 메모리를 조..
결정 트리 1. 결정 트리 - 분류 / 회귀 문제에 널리 사용 - 결정에 다다르기 위해 예 / 아니오 질문을 이어 나가면서 학습 - 과대 적합을 막는 전략 : 사전 가지치기(트리 생성을 일찍 중단) (max_depth, max_leaf_nodes, min_samples_leaf) 사후 가지치기(데이터 포인트가 적은 노드 삭제) scikit-learn은 사전 가지치기만 지원 import pandas as pd # 데이터셋 가져오기 data = pd.read_csv('경로/파일이름.csv', index_col='인덱스로 사용할 컬럼이름') # 데이터셋, X와 y로 나눠주기 y = pd.DataFrame(data['타겟 컬럼이름']) X = data.drop('타겟 컬럼이름', axis=1) # train과 test로 ..
선형모델 1. 선형회귀 - 최소제곱법 (OLS, ordinary least squares) - 가장 간단, 가장 오래된 회귀용 선형 알고리즘 - 훈련 세트의 타깃 y와 예측 사이의 평균제곱오차 (mean squared error)를 최소화하는 파라미터 w와 b를 찾음 import pandas as pd # 데이터셋 가져오기 data = pd.read_csv('경로/파일이름.csv', index_col='인덱스로 사용할 컬럼이름') # 데이터셋, X와 y로 나눠주기 y = pd.DataFrame(data['타겟 컬럼이름']) X = data.drop('타겟 컬럼이름', axis=1) # train과 test로 나눠주기 from sklearn.model_selection import train_test_split X..
K-NN 분류 알고리즘 1. 특징 - 이웃의 수는 3개나 5개 정도로 적을 때 잘 작동 - 유클리디안 거리방식으로 이웃의 거리 측정 2. 장점 - 이해하기 매우 쉬운 모델 - 많이 조저하지 않아도 자주 좋은 성능을 발휘 3. 단점 - 예측이 느림 - 많은 특성을 처리하는 능력이 부족(현업에서 잘 쓰지 않음) import pandas as pd # 데이터셋 가져오기 data = pd.read_csv('경로/파일이름.csv', index_col='인덱스로 사용할 컬럼이름') # 데이터셋, X와 y로 나눠주기 y = pd.DataFrame(data['타겟 컬럼이름']) X = data.drop('타겟 컬럼이름', axis=1) # train과 test로 나눠주기 from sklearn.model_selection import tra..
Data sets 개략적 파악 # value수, 평균, 표준편차, 최대값, 최소값, 사분위 수 출력 print(데이터프레임.describe()) # 데이터프레임 정보 확인하기 print(데이터프레임.info()) # 데이터프레임 크기 확인하기 print(데이터프레임.shape) # 데이터프레임 행 갯수 확인하기 print(데이터프레임.shape[0]) # 데이터프레임 열 갯수 확인하기 print(데이터프레임.shpae[1]) # 히스토그램 컬럼별 그래프 보기 데이터프레임.hist(bins=50, figsize=(20,15)) # 상관관계 수치 보기 데이터프레임.corr()
컬럼 결합 / 삭제 / 정리하기 # 데이터프레임 결합하기 데이터프레임 = pd.concat([데이터프레임1, 데이터프레임2], axis='columns') # 컬럼 삭제 데이터프레임 = 데이터프레임.drop('컬럼', axis=1) # 컬럼이름 정리하기 데이터프레임.columns = ['컬럼1', '컬럼2', '컬럼3'] # 인덱스 값을 기준으로 정렬 데이터프레임.sort_index() # 데이터 값을 기준으로 정렬 데이터프레임.sort_values() # 내림차순은 ascending=False # 컬럼 목록 가져오기 list(데이터프레임.columns)
수치형 데이터, 범주형 데이터 변환 1. 수치형 데이터 → 범주형 데이터 # Titanic data 불러오기 titanic = pd.read_csv('input/train.csv') titanic['Age_cut'] = 0 # 0~16 / 16~32 / 32~48 / 48~64 / 64~80 구간으로 나누고 새 컬럼을 'A', 'B', 'C', 'D', 'E' 컬럼으로 만들기 titanic['Age_cut'] = pd.cut(titanic.Age, bins=[0, 16, 32, 48, 64, 80], labels=['A', 'B', 'C', 'D', 'E']) # 구분 별 시각화하여 개수 확인하기 titanic.Age_cut.value_counts().to_frame().style.background_gradient(cmap='summer..
데이터프레임 컬럼이름 변경하기 # 값 내용과 개수 변경 가능 # 데이터프레임 생성 데이터프레임 = pd.DataFrame({'컬럼1':[값1, 값2], '컬럼2':[값3, 값4]}) # 컬럼 이름 변경 데이터프레임.columns = ['값1', '값2'] # 특정 문자 변경하기 데이터프레임.columns = 데이터프레임.columns.str.replace('문자1', '문자2') # 접두문자 추가하기 데이터프레임.add_prefix('문자1') # 접미문자 추가하기 데이터프레임.add_suffix('문자2') # 컬럼 확인하기 데이터프레임.columns