所以就我复现kaggle比赛的一些经验我可以这么写一点经验。
1.预处理
这个真的是重要中的重要,如果数据集不好,用什么方法效率都很低
相对于英文的预处理,有着非常复杂的去数据的过程。中文感觉只需要一个jieba.stopword和corpus就行。
在这里其实可以用pandas读取数据后,再积累一些堆积的方法,然后一次性给它割的干干净净,这样十分光滑,减少痛苦。
2.模型搭建。
我见过两种模型
1.使用pipeLine将特征提取,模型搭建,参数优化集合在一起。
2.是这种方法,相当于把各种模型进行模块化了,例如:
def model_LR():
# creating classifier
clf = LogisticRegression(tol=1e-8, penalty='l2', C=2)
# training classifier
clf.fit(X_train, label_train)
# model type
print("Model: ",type(clf))
# Predicting probabilities
p = clf.predict_proba(X_val)
return (clf.predict(X_val),p)
def model_SVM():
# creating classifier
clf = svm.LinearSVC(penalty='l2', loss='squared_hinge',tol=1e-8)
# training classifier
clf.fit(X_train, label_train)
# model type
print("Model: ",type(clf))
return clf.predict(X_val)
# Bernoulli Naive Baiyes
def model_BernoulliNB():
# creating classifier
clf = nb.BernoulliNB(alpha=1.0, binarize=0.0)
# training classifier
clf.fit(X_train, label_train)
# model type
print("Model: ",type(clf))
# Predicting probabilities
p = clf.predict_proba(X_val)
return (clf.predict(X_val),p)
衡量标准有这些
def model_evaluation(model,label_test):
#accuracy=np.mean(model == label_test)
#print("%.4f"%np.mean(model == label_test))
# confusion matrix:
cm = confusion_matrix(label_test, model, labels=None, sample_weight=None)
tp, fn, fp, tn = cm[0][0], cm[0][1], cm[1][0], cm[1][1]
precision= float(tp)/(tp+fp)
recall = float(tp)/(tp+tn)
accuracy = np.mean(model == label_test)
print_results (precision, recall, accuracy)
return accuracy
def print_results (precision, recall, accuracy):
banner = "Here is the classification report"
print ('\n',banner)
print ('=' * len(banner))
print ('{0:10s} {1:.1f}'.format('Precision',precision*100))
print ('{0:10s} {1:.1f}'.format('Recall',recall*100))
print ('{0:10s} {1:.1f}'.format('Accuracy',accuracy*100))
#print("*****PRECISION****")
#print("%.4f"%(tp/(tp+fp)))
#print("*****RECALL****")
#print("%.4f"%(tp/(tp+tn)))
#return accuracy
这样就形成了一个模块就可以进行愉快的进行各种算法模型的研究了。