[S][데싸]머신러닝 함수들
데이터 정렬 및 변환
pandas - crosstab() - 두 변수의 원소 조합 빈도 확인(normalize 인자 설정시 비율을 손쉽게 계산
pandas - sort_valus() - 특정 변수를 기준으로 정렬
pandas - melt() - wide form -> long form
pandas - pivot() - long form -> wide form
train and test sample 생성
from sklearn.model_selection import train_test_split
df_train, df_test = train_test_split(df, test_size=0.8, random_state=123)
상관 관계 -선형성 검사
#pandas - corr(), method - peason, kendal, spearman
from scipy.stats import pearsonr
from scipy.stats import spearmanr
from scipy.stats import kendalltau
비계층 군집 분석 - k-mean (random_state, seed 고정 필수)
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
scaler = StandardScler().fit(df)
scaler.transform(df)
k-mean은 연속형 데이터에서 사용한다.
#군집분석 이전에 정규화
nor_minmax = MinMaxScaler().fit(bmi_data)
bmi_data_nor = nor_minmax.transform(bmi_data)
bmi_data_nor = pd.DataFrame(bmi_data_nor, columns= bmi_data.columns)
bmi_data_nor.head(2)
#model.labels_
model = KMeans(n_clusters=4, random_state= 123).fit(bmi_data_nor) #모델을 만들때는 정규화 실시한 내용을 바탕으로 만들고..
bmi_data["cluster"] = model.labels_
bmi_data.head(3)
bmi_data["cluster"].value_counts()
bmi_data.groupby("cluster")["Age"].mean()
#model.cluster_centers_
model= KMeans(n_clusters=3, random_state= 123).fit(bmi_data)
df_centers = pd.DataFrame(model.cluster_centers_, columns=bmi_data.columns)
df_centers
단순 회귀 분석 (선형) [선형방정식이 모델이고, 독립변수 넣으면 추정값이 나온다.]
from statsmodels.formula.api import ols
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
#ols
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv(xxxx)
model = ols(formula = "independent ~ dependent_val", data = df_train).fit()
pred = model.predict(df_test)
pred[:4]
mean_squared_error(y_pred = pred, y_true = df_test["independent"])**0.5 #RMSE
#LinearRegression
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(X = df[["PL"]], y=df["PW"])
model.coef_ # 기울기
mddel.intercept_ # 절편
model.predict(df[["PL"]])
#결정계수 (R^2, Coefficient of determination)
model.score(X, y)
결정계수 수식으로 구하기
y_pred = model.predict(X_test)
r2 = 1 - ((y_test - y_pred)**2).sum() / ((y_test - y_test.mean())**2).sum()
print(r2)
조정된 결정계수 구하기
독립변수의 개수가 증가하면 일방적으로 증가하는 결정계수와 달리 조정된 결정계수는 독립변수가 증가할때 분자를 감소시켜주는 연산을 통해 일방적인 증가를 방지합니다.
다중 회귀 분석 - 다중 공선성, 선형 [선형방정식이 모델이고, 독립변수 넣으면 추정값이 나온다.]
from patsy import dmatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor as vif
formula = "casual ~ " + ".join(df_sub.columns[:-1])
y, X = dmatrices(formula, data = df_sub, return_type = "dataframe")
df_vif = pd.DataFrame()
df_vif["colname"] = X.columns
df_vif["VIF"] = [vif(X.values, i) for i in range(X.shape[1])]
df_vif
from statsmodels.formula.api import ols #요거써서 여러값이 들어왔을때 수치 예측한다.
로지스틱 회귀분석 - 승산비(OR, odds Ratio)
from statsmodels.api import Logit
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
#모델 만들기
model = Logit(endog = df_train["outcome"], exog = df_train.loc[:,["col1","col2","col3"]]).fit()
#모델 이용해서 예측하기
pred = model.predict(exog = df_test.loc[:,["col1","col2","col3"]])
#성능 검토
accuracy_score(y_pred = pred, y_true = df_test["output"])
나이브 베이즈
from sklearn.naive_bayes import GaussianNB
#모델 만들기
nb_model = GaussianNB().fit(X = df_train.loc[:, ["col1","col2","col3"]], y = df_train["output"])
#모델 이용해서 예측하기 (확률이라 predict_proba를 사용함)
pred = nb_model.predict_proba(df_test.loc[:,["col1","col2","col3"]])
pred[:4,]
#성능 검토
from sklearn.metrics import accuracy_score
accuracy_score(y_pred = (pred[:,1] > 0.5) + 0, y_true = df_test["output"])
KNN
from sklearn.neighbors import KNeighborsClassifier #KNN 분류 모델
from sklearn.neighbors import KNeighborsRegressor #KNN 회귀 모델
#model만들고
model = KNeighborsClassifier().fit(X = df_train.loc[:, ["col1","col2","col3"]], y = df_train['output'])
#model을 이용 예측하고
pred = model.predict(df_test.loc[:,["col1","col2","col3"]])
#model 성능을 검토한다.
from sklearn.metrics import accuracy_score
accuracy_score(y_pred = pred, y_true = df_test["output"])
의사결정트리
from sklearn.tree import DecisionTreeClassifier #분류 나무
from sklearn.tree import DecisionTreeRegressor #회귀 나무
sklearn 설명
sklearn 함수가 기억 안나면 아래처럼 원하는 depth에서 하나씩 확인하고 찾아 들어갈수 있다.
import sklearn
sklearn.__all__
sklearn
│
├── 01 preprocessing (전처리)
│ │
│ ├── 스케일러
│ │ ├── MinMaxScaler
│ │ ├── RobustScaler
│ │ └── StandardScaler
│ │
│ └── 인코더
│ ├── LabelEncoder
│ └── OneHotEncoder
│
├── 02 model_selection (모델링 전처리)
│ │
│ ├── 데이터셋 분리
│ │ ├── KFold
│ │ ├── StratifiedKFold
│ │ └── train_test_split
│ │
│ └── 하이퍼파라미터 튜닝
│ └── GridSearchCV
│
├── 03 모델학습
│ │
│ ├── ensemble
│ │ ├── AdaBoostClassifier
│ │ ├── GradientBoostingClassifier
│ │ ├── RandomForestClassifier
│ │ └── RandomForestRegressor
│ │
│ ├── linear_model
│ │ ├── LogisticRegression
│ │ └── RidgeClassifier
│ │
│ ├── neighbors
│ │ └── KNeighborsClassifier
│ │
│ ├── svm
│ │ ├── SVC
│ │ └── SVR
│ │
│ └── tree
│ ├── DecisionTreeClassifier
│ ├── DecisionTreeRegressor
│ ├── ExtraTreeClassifier
│ └── ExtraTreeRegressor
│
├── 04 모델평가
│ │
│ ├── metrics
│ │ ├── accuracy_score
│ │ ├── classification_report
│ │ ├── confusion_matrix
│ │ ├── f1_score
│ │ ├── log_loss
│ │ ├── mean_absolute_error
│ │ ├── mean_squared_error
│ │ └── roc_auc_score
│ │
│ └── model (정의된 모델에서 추출)
│ ├── predict
│ └── predict_proba
│
└── 05 최종앙상블
│
└── ensemble
├── StackingClassifier
├── StackingRegressor
├── VotingClassifier
└── VotingRegressor
scipy설명
scipy
│
├── 01 integrate 수치적분, 미분방정식
│
├── 02 linalg (선형대수, 매트릭스 분해)
│
├── 03 optimize (방정식 해 구하는 알고리즘, 함수 최적화)
│
├── 04 signal (신호 관련)
│
├── 05 sparse (희소 행렬, 희소 선형 시스템)
│
└── 06 stats (통계 분석)
statsmodels설명
statsmodels 함수가 기억 안나면 아래처럼 원하는 depth에서 하나씩 확인하고 찾아 들어갈수 있다.
import statsmodels
help(statsmodels)
statsmodels
│
├── 01 사후분석
│ │
│ └──stats
│ └── multicomp
│ ├── MultiComparison
│ │ └── allpairtest
│ └── pairwise_tukeyhsd
│
├── 02 시계열분석
│ │
│ ├── graphics.tsaplots
│ │ ├── plot_acf
│ │ └── plot_pacf
│ └── tsa
│ ├── arima_model
│ │ └── ARIMA
│ └── statesplace.sarimax
│ └── SARIMAX
│
├── 03 ANOVA (scipy모듈과 함께써야 모두 커버가능, 이분산 anova의 경우 pingouin모듈의 welch_anova를 사용)
│ │
│ ├── 다원분산분석 or 이원분산분석
│ └── 일원분산분석
│ └── stats.anova
│ └── anova_lm
│
└── 04 회귀분석
│
└── formula.api
└── ols