bootstrap文件不能被识别_多分类问题识别实验者状态

多分类问题识别实验者状态

最近收到挺多粉丝留言,询问这个问题。

一、数据处理。

首先我们导入一些必要的库

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

import os

# 解决图片显示以及中文负号乱码问题

%matplotlib inline

plt.rcParams['font.family'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

然后是读取文件部分 文件结构是将数据集文件和.ipynb文件放在同一目录下

def readfile(filePath,i):

Datalist = os.listdir(filePath+str(1))

Data = pd.read_csv(filePath+str(1)+'\\'+Datalist[i])

for x in range(2,4):

datalist = os.listdir(filePath+str(x))

data = pd.read_csv(filePath+str(x)+'\\'+datalist[i])

Data = Data.append(data)

return Data

filePath = 'Data Source\Data Set_'

right = readfile(filePath,0)

left = readfile(filePath,1)

meditation = readfile(filePath,2)

meditation_R = readfile(filePath,3)

meditation_L = readfile(filePath,4)

为多个状态添加标签值

right['label'] = 1

left['label'] = 2

meditation['label'] = 3

meditation_L['label'] = 4

meditation_R['label'] = 5

将数据整合在一起

# 将所有数据拼接在一起

data1 = right.append(left,ignore_index= False)

data2 = data1.append(meditation,ignore_index= False)

data3 = data2.append(meditation_L,ignore_index= False)

Data = data3.append(meditation_R,ignore_index= False)

# Data.to_csv('Data.csv')

最后Data就是我们要使用的数据集了,最后一行注释代码是将这个数据文件保存,下次另外使用的时候就可以不需要前面的步骤了。接下来我们可以看一下数据分布的情况,这里采用了三种方法,第一个是matplotlib里面的bar,即柱状图,第二个是绘制的饼图可以看看数据的占比是什么,第三个是pandas自带的画图模块绘制的雷达图。接下来我们一一查看一下吧!

# 查看每种标签值有多少

x = [1,2,3,4,5]

c1 = Data[Data['label'] == 1].shape[0]

c2 = Data[Data['label'] == 2].shape[0]

c3 = Data[Data['label'] == 3].shape[0]

c4 = Data[Data['label'] == 4].shape[0]

c5 = Data[Data['label'] == 5].shape[0]

y = [c1,c2,c3,c4,c5]

plt.bar(x,y,color='rgb')

for a, b in zip(x, y):

plt.text(a, b, '%.0f' % b, ha='center', va='bottom', fontsize=11)

plt.show()

032364831c1580298ab44552ebf5302e.png1,2,3,4,5标签分别代表着不同的状态。下面看看饼图的情况吧。

size = [c1/Data.shape[0],c2/Data.shape[0],c3/Data.shape[0],c4/Data.shape[0],c5/Data.shape[0]]

explode = (0,0,0.1,0,0)

labels = ['举右手','举左手','冥想','冥想举右手','冥想举左手']

plt.pie(size,explode=explode,labels=labels,autopct='%1.1f%%')

plt.title("各标签所占比例图")

c5c0de108d74b657ed6fc1f22e828f8c.png下面看看雷达图:

pd.plotting.radviz(Data, 'label')

15dbb7af65c09add99a25b33b07f6ebb.png接下来进行数据预处理的操作。

二、数据预处理

这里使用主成分分析对数据进行处理

X = Data.drop('label',axis = 1)

y = Data['label']

# 主成分分析

from sklearn.decomposition import PCA

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

X = scaler.fit_transform(X)

pca = PCA(n_components = 0.999)

X = pca.fit_transform(X)

数据处理完之后就可以分割数据集了,然后构建模型了

# 分割数据集

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X , y , test_size = 0.2 , random_state = 123)

三、构建模型

我在这里选取了三个对多分类模型都比较好的模型,分别是随机森林模型,KNN,以及MLP模型对数据进行拟合,训练。下面写了一个模型评估函数

3.1 随机森林模型

# 绘制混淆矩阵

def plot_confusion_matrix(cm, classes=None, title='Confusion matrix'):

if classes is not None:

sns.heatmap(cm, xticklabels=classes, yticklabels=classes, vmin=0., vmax=1., annot=True)

else:

sns.heatmap(cm, vmin=0., vmax=1.)

plt.title(title)

plt.ylabel('True label')

plt.xlabel('Predicted label')

# 模型评估一般标准

def model_performance_evaluation(model_name, test, pred):

print(model_name, '| Accuracy: %.4f' % accuracy_score(test, pred))

print(model_name, '| Confusion matrix:\n', confusion_matrix(test, pred))

然后第一个是随机森林模型的构建

from sklearn.ensemble import RandomForestClassifier

from sklearn import metrics

from sklearn.metrics import accuracy_score,confusion_matrix,classification_report

RfClf = RandomForestClassifier(n_estimators =600,oob_score=True,bootstrap=True,n_jobs=4,random_state = 123)

RfClf.fit(X_train,y_train)

predict_train2 = RfClf.predict(X_train)

predict_test2 = RfClf.predict(X_test)

对模型的评估看一下结果

# 查看一下数据在训练集上的表现效果

cm = confusion_matrix(y_train,predict_train2)

cm_norm = cm/cm.sum(axis=1)[:, np.newaxis]

plt.figure()

plot_confusion_matrix(cm_norm, classes=RfClf.classes_, title='Training confusion')

model_performance_evaluation(model_name,y_train,predict_train2)

725dc78c32a5bcf84ef28a495765329e.png84c16741ca85ab66c8db2fe526701679.png看到准确率有1这么高,可是不能高兴啊,这是在训练集上的模型,八成是过拟合了。看看测试集上的表现再说吧。

cm = confusion_matrix(y_test,predict_test2)

cm_norm = cm/cm.sum(axis=1)[:, np.newaxis]

plt.figure()

plot_confusion_matrix(cm_norm, classes=RfClf.classes_, title='Testing confusion')

model_performance_evaluation(model_name,y_test,predict_test2)

dca0dd91a8c79e0492e064e8c53a4f22.png37b4ef0b2726b30d5ea3ca7c560dda13.png果然是过拟合了,调了很多次参数也没有弄好,果断放弃了。换一个模型吧。

3.2 KNN模型

这里只贴出模型构建的代码,因为其他的模型评估部分有函数了,都差不多的。

from sklearn.neighbors import KNeighborsClassifier

k = 5

knn = KNeighborsClassifier(n_neighbors = k)

knn.fit(X_train,y_train)

y_pred = knn.predict(X_test)

因为是五分类问题,所以K值我选了5但最后试了一下还是k=1的时候准确率最高了有71%左右吧 。acb4a6ebba4acaeb104cde9e6ee3bfaf.png95e686bc2c48315e044cfcf98fb6683b.png

3.3 神经网络模型

from sklearn.neural_network import MLPClassifier

mlp = MLPClassifier(hidden_layer_sizes = (400,400),random_state = 753)

mlp.fit(X_train,y_train)

y_pred = mlp.predict(X_test)

和上面一样调了很久的参,果真是调参杀我。c9b5db76aa1dc622f8ed632ddc183c86.pngda8784c72ea972d975d51a389c57900d.png

四、结语

以上就是全部的内容了,希望有兴趣的小伙伴多发些案例来给我做一下,让我在实战中成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值