sklearn练习题
程序员文章站
2022-07-14 12:45:24
...
1. GaussianNB:
解释见注释
代码如下:
from sklearn import datasets,cross_validation
from sklearn.naive_bayes import GaussianNB
#from sklearn.svm import SVC
#from sklearn import cross_validation
#from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
x,y=datasets.make_classification(n_samples=1000,n_features=10,n_classes=2)
#生成样本
kf=cross_validation.KFold(len(x),n_folds=10,shuffle=True)
#将样本分成10份
for train_index,test_index in kf: #分成训练集和测试集
x_train,y_train=x[train_index],y[train_index]
x_test,y_test=x[test_index],y[test_index]
clf=GaussianNB()#创建朴素贝叶斯模型
clf.fit(x_train,y_train)#拟合朴素贝叶斯模型
pred=clf.predict(x_test)#预测
#评估模型
acc = metrics.accuracy_score(y_test, pred)
print("Accuracy_score: %f" %acc)
f1 = metrics.f1_score(y_test, pred)
print("f1_score: %f" %f1)
auc = metrics.roc_auc_score(y_test, pred)
print("roc_auc_score: %f" %auc)
运行结果:
2. SVC:
前面的步骤和朴素贝叶斯的生成方法一样。
代码如下:
from sklearn import datasets,cross_validation
from sklearn.svm import SVC
#from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
x,y=datasets.make_classification(n_samples=1000,n_features=10,n_classes=2)
#生成样本
kf=cross_validation.KFold(len(x),n_folds=10,shuffle=True)
#将样本分成10份
for train_index,test_index in kf: #生成训练集和测试集
x_train,y_train=x[train_index],y[train_index]
x_test,y_test=x[test_index],y[test_index]
for c in [1e-02, 1e-01, 1e00, 1e01, 1e02]:
clf=SVC(c, kernel='rbf', gamma=0.1) #创建SVC模型
clf.fit(x_train,y_train)#拟合SVC模型
pred=clf.predict(x_test)#预测
#评估模型
print("c : %f" %c)
acc = metrics.accuracy_score(y_test, pred)
print("Accuracy_score: %f" %acc)
f1 = metrics.f1_score(y_test, pred)
print("f1_score: %f" %f1)
auc = metrics.roc_auc_score(y_test, pred)
print("roc_auc_score: %f" %auc)
print()
结果如下:
3. RandomForestClassifier (possible n estimators values [10, 100, 1000]):
依旧和前面的差不都,只是换一些库函数和参数。
代码如下:
from sklearn import datasets,cross_validation
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
x,y=datasets.make_classification(n_samples=1000,n_features=10,n_classes=2)
#生成样本
kf=cross_validation.KFold(len(x),n_folds=10,shuffle=True)
#将样本分成10份
for train_index,test_index in kf: #生成训练集和测试集
x_train,y_train=x[train_index],y[train_index]
x_test,y_test=x[test_index],y[test_index]
for n in [10, 100, 1000]:
clf = RandomForestClassifier(n_estimators=n) #创建RFC模型
clf.fit(x_train,y_train)#拟合RFC模型
pred=clf.predict(x_test)#预测
#评估模型
print("n_estimators : %f" %n)
acc = metrics.accuracy_score(y_test, pred)
print("Accuracy_score: %f" %acc)
f1 = metrics.f1_score(y_test, pred)
print("f1_score: %f" %f1)
auc = metrics.roc_auc_score(y_test, pred)
print("roc_auc_score: %f" %auc)
print()
结果如下:
分析:
从实验的结果来看,RandomForestClassifier模型的预测能力最强,而SVC和GaussianNB的得分差不多。
对于RandomForestClassifier模型,参数n_estimators从10变成100,评估稍微变好了一点,但是从100到1000的时候变化不大,可能是在n_estimators较大的时候,大小变化对评估结果的影响就不会太大了,可能是评估已经得到了比较好的结果的缘故,进步空间小了。