欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn练习题

程序员文章站 2022-07-14 12:45:24
...

sklearn练习题

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)


    运行结果:

    sklearn练习题


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()


    结果如下:

sklearn练习题


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()



   结果如下:

    

    sklearn练习题

分析:

    从实验的结果来看,RandomForestClassifier模型的预测能力最强,而SVC和GaussianNB的得分差不多。

    对于RandomForestClassifier模型,参数n_estimators从10变成100,评估稍微变好了一点,但是从100到1000的时候变化不大,可能是在n_estimators较大的时候,大小变化对评估结果的影响就不会太大了,可能是评估已经得到了比较好的结果的缘故,进步空间小了。