一起读代码_KNN,决策树,贝叶斯分类运动状态

在面对分类任务中,我们需要从几个方面考虑分类方法的优缺点,常见的评价方法有:
精确率:是针对分类结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。
那么预测为正就有两种可能 了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP), 也就是
P=TP/(TP+FP)
召回率:是对我们原来的样本而言的,它表示的是样本中的正例有多 少被预测正确了。
那也有两种可能,一种是把原来的正类预测成正类(TP), 另一种就是把原来的正类预测为负类(FN),也就是
R=TP/(TP+FN)
F1值:是精确度和召回率的调和平均值
F1=2*(P*R)/(P+R)
F1值在1时达到最佳

实验数据
展示:
记录41种运动信息的feature文件和0-24共25类的label文件
在这里插入图片描述
在这里插入图片描述
代码详解:

import pandas as pd
import numpy as np

from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.neighbors import  KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier

def load_dataset(feature_paths,label_paths):
    feature= np.ndarray(shape=(0,41))#特征参数有41个
    label=np.ndarray(shape=(0,1))#标签有25种,每个运动特征对应一种运动状态
    for file in feature_paths:
        df=pd.read_table(file,delimiter=',',na_values='?',header=None)#读取数据其中用逗号分隔,缺失值是?,不包含表头
        imp=SimpleImputer(strategy='mean')#采用均值填充的方式填补缺失数据
        imp.fit(df)
        df=imp.transform(df)
        feature=np.concatenate((feature,df))#将读入的数据合并到feature[]中
    for file in label_paths:
        df=pd.read_table(file,header=None)
        label=np.concatenate((label,df))
    label=np.ravel(label)#将标签转化为一维向量(行向量)
    return feature,label
if __name__== '__main__':
    feature_paths=['A.feature',
                   'B.feature',
                   'C.feature']
    label_paths=['A.label',
                 'B.label',
                 'C.label']
    x_train,y_train=load_dataset(feature_paths[:2],label_paths[:2])#读取前两个数据作为训练集
    x_test,y_test= load_dataset(feature_paths[2:],label_paths[2:])#读取最后一个数据作为测试集
    x_train,x_test,y_train,y_test=train_test_split(x_train,y_train,test_size=0.2)
    #随机划分训练集函数,训练集和测试集的比例为1:5(也可以人为给定测试集数目),并且不设置随即种子#
    print('Start training knn')
    knn=KNeighborsClassifier().fit(x_train,y_train)
    print('Training done!')
    answer_knn= knn.predict(x_test)
    print('Prediction done!')
    print('Start training DT')
    dt=DecisionTreeClassifier().fit(x_train,y_train)
    print('Training done!')
    answer_dt=dt.predict(x_test)
    print('Prediction done!')
    print('Start training Bayes')
    gnb=GaussianNB().fit(x_train,y_train)
    print('Training done!')
    answer_gnb=gnb.predict(x_test)
    print('Prediction done!')
    print('\n\nThe classification report for knn:')
    print(classification_report(y_test,answer_knn))
    print('\n\nThe classification report for dt:')
    print(classification_report(y_test,answer_dt))
    print('\n\nThe classification report for gnb:')
    print(classification_report(y_test,answer_gnb))

实验结果:
KNN
dt
gnb

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值