sklearn作业题:
简要意思就是测试朴素贝叶斯,SVM,随机森林三种算法对解决同一个问题的性能分析。
步骤1:创建数据集
dataset = datasets.make_classification(n_samples=1000, n_features=10)
步骤2:用10重交叉验证对数据集拆分。
kf = cross_validation.KFold(1000, n_folds=10, shuffle=True)
步骤3:分别训练三种算法(里面的evaluate是步骤4中的函数)
#caculate train and test
for train_index, test_index in kf:
x_train, y_train = dataset[0][train_index], dataset[1][train_index]
x_test, y_test = dataset[0][test_index], dataset[1][test_index]
# GaussianNB
bayes = GaussianNB()
bayes.fit(x_train, y_train)
pred = bayes.predict(x_test)
print('GaussianNB:')
evaluate(y_test,pred)
# SVC
svc = SVC(C=1e-01, kernel='rbf', gamma=0.1)
svc.fit(x_train, y_train)
pred = svc.predict(x_test)
print('SVC:')
evaluate(y_test,pred)
# Random Forest
rf = RandomForestClassifier(n_estimators=6)
rf.fit(x_train, y_train)
pred = rf.predict(x_test)
print('Random Forest:')
evaluate(y_test,pred)
步骤4:评估算法在accuracy f1 auc 方面的表现
def evaluate(y_test,pred):
# Accuracy
acc = metrics.accuracy_score(y_test, pred)
print('Accuracy:',acc)
# F1-score
f1 = metrics.f1_score(y_test, pred)
print('F1-score:',f1)
# AUC ROC
auc = metrics.roc_auc_score(y_test, pred)
print('AUC ROC:',auc)
步骤5:总结
全部代码
from sklearn import datasets
from sklearn import metrics
from sklearn import cross_validation
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
#s4
def evaluate(y_test,pred):
# Accuracy
acc = metrics.accuracy_score(y_test, pred)
print('Accuracy:',acc)
# F1-score
f1 = metrics.f1_score(y_test, pred)
print('F1-score:',f1)
# AUC ROC
auc = metrics.roc_auc_score(y_test, pred)
print('AUC ROC:',auc)
#s1
dataset = datasets.make_classification(n_samples=1000, n_features=10)
#s2
kf = cross_validation.KFold(1000, n_folds=10, shuffle=True)
#s3
#caculate train and test
for train_index, test_index in kf:
x_train, y_train = dataset[0][train_index], dataset[1][train_index]
x_test, y_test = dataset[0][test_index], dataset[1][test_index]
# GaussianNB
bayes = GaussianNB()
bayes.fit(x_train, y_train)
pred = bayes.predict(x_test)
print('GaussianNB:')
evaluate(y_test,pred)
# SVC
svc = SVC(C=1e-01, kernel='rbf', gamma=0.1)
svc.fit(x_train, y_train)
pred = svc.predict(x_test)
print('SVC:')
evaluate(y_test,pred)
# Random Forest
rf = RandomForestClassifier(n_estimators=6)
rf.fit(x_train, y_train)
pred = rf.predict(x_test)
print('Random Forest:')
evaluate(y_test,pred)
结果
GaussianNB:
Accuracy:0.82
F1-score:0.8125
AUC ROC:0.8195278111244497
SVC:
Accuracy:0.82
F1-score:0.8269230769230769
AUC ROC:0.8211284513805521
Random Forest:
Accuracy:0.9
F1-score:0.8936170212765957
AUC ROC:0.8991596638655462
Process finished with exit code 0
这是一次执行的结果,按照三种算法的表现排序是GNB<SVC<RF,并且随机森林的三种方面表现显著好于其他两种算法。在多次结果我们发现除了这种结果还有一种结果是三种算法在三个方面表现相差无几。由于篇幅这里不给出。