Sklearn
sklearn是基于numpy和scipy的机器学习算法库,功能强大,使用简便。
我在学习图形学时曾深入了解过机器学习的相关知识。简而言之,机器学习就是机器根据所给数据自动生成并优化判别方法的过程,其间的实现不被也不需被人知晓。本课介绍了3种主要的算法:朴素贝叶斯、支持向量机、随机森林。它们都是典型的适用于分类的监督学习方法。除此,课上还介绍了交叉验证和性能评估方法。
·朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法,理论上简单且可靠。依靠定理:P(A | B) = P(B | A)*P( A) / P(B),NBC假定各参数之间相互条件独立,但事实总有偏差。
·支持向量机是一种十分常见的分类器,核心思路是对高维的参数向量构造分割面,使结果尽可能分离。
·随机森林基于决策树实现。使用观测数据的子集和变量的子集来建立多个决策树,然后将它们合并在一起获得更准确和稳定的预测。
注意:f1_score和roc_auc_score只能用在二分结果上。
代码
from sklearn import datasets
from sklearn import cross_validation
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
from sklearn.svm import SVC
(Dx, Dy) = datasets.make_classification(n_samples=2400, n_features=12, n_classes=2, n_informative = 4) #12参数2类别随机分类模型
NB = 0.0
RFC = 0.0
Svc = 0.0
kf = cross_validation.KFold(len(Dy), n_folds = 10, shuffle = True) #10组交叉验证
for train_index, test_index in kf:
X_train, y_train = Dx[train_index], Dy[train_index]
X_test, y_test = Dx[test_index], Dy[test_index]
print("Test Y:\n", y_test)
print()
clf = GaussianNB() #朴素贝叶斯
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print("GNB:\n", pred)
acc = metrics.accuracy_score(y_test, pred)
print("acc:", acc)
f1 = metrics.f1_score(y_test, pred)
print("f1:", f1)
auc = metrics.roc_auc_score(y_test, pred)
print("auc:", auc)
print()
NB = NB + (acc+f1+auc)
clf = SVC() #向量聚类
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print("SVC:\n", pred)
acc = metrics.accuracy_score(y_test, pred)
print("acc:", acc)
f1 = metrics.f1_score(y_test, pred)
print("f1:", f1)
auc = metrics.roc_auc_score(y_test, pred)
print("auc:", auc)
print()
Svc = Svc + (acc+f1+auc)
clf = RandomForestClassifier() #随机森林
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print("RFC:\n", pred)
acc = metrics.accuracy_score(y_test, pred)
print("acc:", acc)
f1 = metrics.f1_score(y_test, pred)
print("f1:", f1)
auc = metrics.roc_auc_score(y_test, pred)
print("auc:", auc)
print('\n')
RFC = RFC + (acc+f1+auc)
print('Summary:(Average Accuracy)')
print('Naive_Bayes: ',NB/30)
print('SVC: ',Svc/30)
print('RandomForest: ',RFC/30)
结果
可见,这三者的效果都不错,其中SVC算法的总体精确度最高,Naive_Bayes最低。