注:本文与《利用机器学习解决问题的一般流程之0-4数据导入和数据分析》中采用的数据集有所不同,不过解决问题的思路都是通用的。
本文主要参考魏贞原先生的《机器学习python实践》
本文将采用声呐、矿山和岩石数据集,通过声呐返回的信息判断物质是金属还是岩石。这个数据集共有208 条记录,每条数据记录了60 种不同的声呐探测的数据和一个分类结果,若是岩石则标记为R,若是金属则标记为M。
#导入数据
data = pd.read_csv('data/sonar_all-data.csv',header=None)
x = data.values[:,:60]
y = data.values[:,60]
5、数据处理
此步骤包含数据缩放、特征提取、降维、one-hot编码等等很多数据处理手段,由于个人能力有限,以及学习过程中的数据集大都是已经处理过的数据,因此,这部分暂且略过,日后有机会再补上。
6、评估算法
1、事先划分数据集,在整个评估算法过程中,为避免数据泄露,只是使用训练集数据,测试集数据留到最后的测试
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=7)
2、定义评估指标
num_folds=10
seed = 7
#使用准确度进行评估
scoring='accuracy'
kfold = KFold(n_splits=num_folds, random_state=seed)
3、评估算法-原始数据
#定义模型
models = {
}
models['LR'] = LogisticRegression(solver='lbfgs')
models['LDA'] = LinearDiscriminantAnalysis()
models['KNN'] = KNeighborsClassifier()
models['DTC'] = DecisionTreeClassifier()
models['NB'] = GaussianNB()
models['SVM'] = SVC(gamma='auto')
results = []
for key in models:
cv_results = cross_val_score(models[key],x_train,y_train,cv=kfold,
scoring=scoring)
results.append(cv_results)
print('%s::%f(%f)'% (key,cv_results.mean(),cv_results.std()))
#原始数据-箱线图
plt.figure()
plt.boxplot