第十五周——sklearn

【实验题目】

生成一个任意二元分类问题,然后测试三种算法(用十折交叉验证),对于一些算法的内部交叉验证(五折)在参数选择时是必要的。然后在报告中展示验证(每折的和平均的),然后简单分析结果。

【实验方案】

1.创造一个分类数据集(n_samples>=1000,n_features>=10)。

2.用十折交叉验证划分。

3.尝试以下算法:GaussianNB,SVC(C的可能值[1e-02,1e-01,1e00,1e01,1e02],RBFkernel),RandomForestClassifier(可能的n_estimators值[10,100,1000])。

4.评价交叉验证结果:Accuracy,F1-score,AUC ROC。

5.写一个简短的报告总结理论和结果。

程序设计

from sklearn import datasets

from sklearn import cross_validation
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics


#Create a classification dataset
print ("Create a classification dataset")
iris=datasets.load_iris()
dataset=datasets.make_classification(n_samples=1000,n_features=10,n_informative=2,n_redundant=2,n_repeated=0,n_classes=2)
print (iris.DESCR)
print (iris.data)
print (iris.target)


#Split the dataset using 10-fold cross validation
kf=cross_validation.KFold(len(iris.data),n_folds=10,shuffle=True)
for train_index,test_index in kf:
X_train,y_train=iris.data[train_index],iris.target[train_index]
X_test,y_test=iris.data[test_index],iris.target[test_index]
print ("Split the dataset using 10-fold cross validation")
print (X_train)
print (y_train)
print (X_test)
print (y_test)


#GaussianNB
clf=GaussianNB()
clf.fit(X_train,y_train)
pred=clf.predict(X_test)
print ("GaussianNB")
print (pred)
print (y_test)


#SVC(C:[1e-02,1e-01,1e00,1e01,1e02],RBF kernel)
clf=SVC(C=1e-01,kernel='rbf',gamma=0.1)
clf.fit(X_train,y_train)
pred=clf.predict(X_test)
print ("SVC(C:[1e-02,1e-01,1e00,1e01,1e02],RBF kernel)")
print (pred)
print (y_test)


#RandomForestClassifier(n_estimators:[10,100,1000])
clf=RandomForestClassifier(n_estimators=10)
clf.fit(X_train,y_train)
pred=clf.predict(X_test)
print ("RandomForestClassifier(n_estimators:[10,100,1000])")
print (pred)
print (y_test)


#Evaluate:Accuracy,F1-score,AUC ROC
acc=metrics.accuracy_score(y_test,pred)
print ("Accuracy")
print (acc)


f1=metrics.f1_score(y_test,pred,average = "weighted")
print ("F1-score")
print (f1)


auc=metrics.roc_auc_score(y_test,pred)
print ("AUC ROC")

print (auc)


功能展示

创造一个分类数据集:

第十五周——sklearn

第十五周——sklearn

第十五周——sklearn

用十折交叉验证划分:

第十五周——sklearn

第十五周——sklearn

第十五周——sklearn

第十五周——sklearn

尝试三种算法:

第十五周——sklearn

评价交叉验证结果:

第十五周——sklearn

代码是对着 ppt 写的但 AUC 运行失败,原因尚不明。F1-score 也曾经运行失败但在查资料后解决了。


【实验总结】

本次实验基本是按着老师给的资料来做的。主要涉及的理论知识有数据集加载,交叉验证(用k折scikit-learn实现),朴素贝叶斯分类器及GaussianNB,支持向量机,随机森林算法,并学会了从AUC ROC曲线,F1分数,精确性的角度去评价实验结果。有些算法需要指定参数,比如SVM的参数C,随机森林的树木数量,参数不同会导致结果不同。以上为本次实验我的所学所感,希望下次做得更好。