任务3 - 建模
用逻辑回归、svm和决策树;随机森林和XGBoost进行模型构建,评分方式任意,如准确率等。(不需要考虑模型调参)
一、 使用逻辑回归
from sklearn.linear_model import SGDClassifier
1 初始化模型
log_reg = SGDClassifier(loss='log',penalty='l2',max_iter = 200)
2 训练
log_reg.fit(X_train, y_train)
3 预测
y_pred_lgr = log_reg.predict_proba(X_test)
print (y_pred_lgr[:5])
4 评估
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_recall_fscore_support
from sklearn.metrics import classification_report,confusion_matrix
train 和 test 的精确度
acc_lgr_train = accuracy_score(y_train, y_train_lgr)
acc_lgr = accuracy_score(y_test, y_pred_lgr)print('train acc:%.2f, test acc:%.2f'%(acc_lgr_train, acc_lgr),'\n')
二、 使用支持向量机 SVM
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
1 初始化模型
SVC, PCA, make_pipeline
pca = PCA(n_components = 13, whiten=True)
svc = SVC(kernel='rbf', class_weight='balanced',C=3)
model_svc = make_pipeline(pca, svc)
2 训练
GridSearchCV
# 尝试各个svc的C参数和gamma参数
from sklearn.model_selection import GridSearchCV
param_grid = {'svc__C':[3,4],
'svc__gamma':[5,10]}
grid = GridSearchCV(model_svc, param_grid)
grid.fit(X_train, y_train)
print(grid.best_params_)
或者 用model_svc.fit(x,y)
3 预测
4 评估
acc_svm_train = accuracy_score(y_train, y_pred_svc_train)
acc_svm = accuracy_score(y_test, y_pred_svc)print('SVM train acc:{0:.4f}, SVM test acc:{1:.4f}'\
.format(acc_svm_train, acc_svm))
看看多少个0类结果
len(y_pred_svc[y_pred_svc==0])
准确性
precision, recall, F1, _ = precision_recall_fscore_support(y_test, y_pred_svc, average="binary")
# precision, recall, F1, _ = precision_recall_fscore_support(y_train, y_pred_svc_train, average="binary")
print ("precision: {0:.2f}. recall: {1:.2f}, F1: {2:.2f}"
.format(precision, recall, F1))
三、 随机森林
# 初始化随机森林
forest = RandomForestClassifier(
n_estimators=10, criterion="entropy",
max_depth=8,
min_samples_leaf=2)
# 训练
forest.fit(X_train, y_train)
# 预测
y_pred_train = forest.predict(X_train)
y_pred = forest.predict(X_test)
# 评估
# 准确率acc_dtree_train = accuracy_score(y_train, y_pred_train)
acc_tree = accuracy_score(y_test, y_pred)print('train acc:%.2f, test acc:%.2f'%(acc_dtree_train, acc_tree),'\n')
--- End ---