Adaboost算法训练模拟体征数据
数据规则定义
首先,先看看规则定义的出自文献
心率 ----------------------
血压 ----------------------
温度 ----------------------
根据上面3个 我们可以确定的是,情绪(精神)与 心率 ,血压, 温度 ,有相当大的一部分关系,然后基于百度,做了一下参考。
总结了一下具体的规则
- (关于心率方面)恐惧心率最高,其次是高兴愤怒,再次是悲伤,且这几种都比平稳状态要高。
- (关于血压方面)正性情绪 血压偏向于稳定状态,反之则提高明显
- (关于体表温度)高昂的情绪,提高相对来说提高一点
生成模拟数据
生成数据的规则是这样的
我们将分类定义为3个分类,消极向,正常向,积极向
这是代码
import random
import pandas as pd
# 导入对应的库
# 随机生成900条 体征数据
hrs = []
skts = []
sps = []
states = []
for i in range(900):
state = random.randint(0, 2)
# 三个状态 差 中 好
if state == 0:
# 表示 状态比较 负面
# 心率 提高
# 血压 提高
# 体温 下降
hr = random.randint(85, 100)
sp = random.randint(125, 145)
skt = random.randint(3600, 3700)
elif state == 1:
# 表示 状态一般
# 心率 相对正常正常
# 血压 不变
# 体温 不变
hr = random.randint(70,80)
sp = random.randint(115,130)
skt = random.randint(3650,3750)
else:
# 表示 状态比较 正面
# 心率 也有提高 但是没有那么明显
# 血压 趋势稳定
# 体温 提高
hr = random.randint(80, 90)
sp = random.randint(115,130)
skt = random.randint(3700, 3800)
hrs.append(hr)
sps.append(sp)
skts.append(skt/100)
states.append(state)
# 写入dataframe
dataframe = pd.DataFrame({'hr':hrs,'skt':skts,'sp':sps,'stu':states})
# 生成 csv文件
dataframe.to_csv("../signs.csv",index=False,sep=',')
print("isOK")
为了方便观察
单独画出来了
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D # 3D绘制 模拟体征数据 data = np.genfromtxt("../signs.csv",delimiter=",") ax = plt.subplot(111, projection='3d') ax.scatter(data[1:,0],data[1:,1], data[1:,2], c=data[1:,-1]) ax.set_xlabel("hr") ax.set_ylabel("sp") ax.set_zlabel("skt") plt.show()
效果
训练模型
这一步相对简单,使用sklearn库,大大的简化了 我们训练的代码
import numpy as np from sklearn.ensemble import AdaBoostClassifier from sklearn.tree import DecisionTreeClassifier
# 三维数据模型分类 # # 读取数据 该测试数据 可以通过Random 类生产 data = np.genfromtxt("..\signs.csv",delimiter=",") x_data,y_data,z_data = data[1:,0],data[1:,1],data[1:,2] mode1 = AdaBoostClassifier(DecisionTreeClassifier(max_depth=5),n_estimators=10) # 使用训练集 训练模型 mode1.fit(data[1:,:3],data[1:,-1])
这一步 好简单。
测试模型
重新用了生成csv的方法 ,在相同的规则下面。 随机成功了200数据。代码就不贴出来了
print(mode1.score(datas,states))
评估正确率 99%