DAY 12 机器学习建模与评估(加更)

DAY 12 机器学习建模与评估(加更)
浙大疏锦行一、数据预处理在数据划分之前没有归一化和标准化是未了避免在训练集/验证集中出现数据泄露的问题在划分数据集之前归一化和标准化训练过程会间接利用了测试集的均值和标准差信息会导致模型在未知数据上过于乐观二、机器学习模型建模1.2 数据划分划分训练集和测试集from sklearn.model_selection import train_test_split #axis1代表按列删除原来数据不变保存到新变量 xdata.drop([信贷违约],axis1) #标签 ydata[信贷违约] #划分数据集20%为测试集随机种子42保证实验可复现 x_train,x_test,y_train,y_testtrain_test_split(x,y,test_size0.2,random_state42)1.2数据归一化只需对连续特征归一化from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler,MinMaxScaler #找出连续特征 continuous_features [ 年收入, 当前工作年限, 开放账户数量 ] #初始化归一化器 scalerMinMaxScaler() x_train[continuous_features]scaler.fit_transform(x_train[continuous_features]) # 使用训练集学到的参数 (scaler) 直接对测试集进行 transform #相当于这里归一化 用到的最大值和最小值都是测试集的 # 绝对不能对测试集使用 fit_transform() X_test[continuous_features] scaler.transform(X_test[continuous_features])1.3模型训练与评估三行经典代码1.模型实例化 2.模型训练带入训练集3.模型预测带入预测集测试集的预测值和测试集的真实值进行对比得到混淆矩阵TP预测对了都是正例TN预测对了都是负例FP预测错了预测成了正例。实际为负FN预测错了预测成了负例。实际为正召回率RTP/(TPFN) 越高漏报越低关注“漏报”精确率PTP/(TPFP) 越高越准确关注“误报”F12*(P*R)/(PR) 是P和R的调和平均准确率(TPTN)/(TPTNFPFN)AUC是基于不同阈值得到不同的混淆矩阵然后计算每个阈值对应FPR和TPR讲这些点连成线最后求曲线下的面积得到AUC值导入数据库from sklearn.svm import SVC #支持向量机分类器 from sklearn.neighbors import KNeighborsClassifier #K近邻分类器 from sklearn.linear_model import LogisticRegression #逻辑回归分类器 import xgboost as xgb #XGBoost分类器 import lightgbm as lgb #LightGBM分类器 from sklearn.ensemble import RandomForestClassifier #随机森林分类器 from catboost import CatBoostClassifier #CatBoost分类器 from sklearn.tree import DecisionTreeClassifier #决策树分类器 from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类器 from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标 from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵 import warnings #用于忽略警告信息 warnings.filterwarnings(ignore) # 忽略所有警告信息SVM#SVM svm_modelSVC(random_state42) #创建模型 svm_model.fit(x_train,y_train) #训练模型 svm_predsvn_model.predict(x_test) #用训练好的模型来预测 print(classification_report(y_test, svm_pred)) # 打印分类报告 print(confusion_matrix(y_test, svm_pred)) # 打印混淆矩阵 # 计算 SVM 评估指标这些指标默认计算正类的性能 svm_accuracy accuracy_score(y_test, svm_pred) svm_precision precision_score(y_test, svm_pred) svm_recall recall_score(y_test, svm_pred) svm_f1 f1_score(y_test, svm_pred)KNN# KNN knn_model KNeighborsClassifier() #创建模型 knn_model.fit(X_train, y_train) #训练模型 knn_pred knn_model.predict(X_test) #用训练好的模型预测 print(classification_report(y_test, knn_pred)) print(confusion_matrix(y_test, knn_pred)) knn_accuracy accuracy_score(y_test, knn_pred) knn_precision precision_score(y_test, knn_pred) knn_recall recall_score(y_test, knn_pred) knn_f1 f1_score(y_test, knn_pred)逻辑回归# 逻辑回归 logreg_model LogisticRegression(random_state42) #创建模型 logreg_model.fit(X_train, y_train) #训练模型 logreg_pred logreg_model.predict(X_test) #用训练好的模型预测 print(classification_report(y_test, logreg_pred)) print(confusion_matrix(y_test, logreg_pred)) logreg_accuracy accuracy_score(y_test, logreg_pred) logreg_precision precision_score(y_test, logreg_pred) logreg_recall recall_score(y_test, logreg_pred) logreg_f1 f1_score(y_test, logreg_pred)朴素贝叶斯决策树等其他机器学习均类似关于指标一般都会选取一个主指标用主指标筛选出最好的模型一般最好的指标对应的模型其他指标也都很好