KNN对机器故障的识别
【摘要】 此项目使用KNN算法对机器故障进行识别,机器共有三类故障,每个数据包含两个特征,标签及为机器故障的种类。
项目简介
此项目使用KNN算法对机器故障进行识别,机器共有三类故障,每个数据包含两个特征,标签及为机器故障的种类。
数据预处理
# 读取数据
a = {"Abnormal1": [1, 0, 0, 0],
"Abnormal2": [0, 1, 0, 0],
"Abnormal3": [0, 0, 1, 0],
"Normal": [0, 0, 0, 1]}
b = {"1.csv": "Abnormal1",
"2.csv": "Abnormal2",
"3.csv": "Abnormal3",
"4.csv": "Normal",
"5.csv": "Normal",
"6.csv": "Normal"}
def create_data(dirr):
data = []
label = []
hh = 0
for name in os.listdir(dirr):
flie = open(dirr + name)
for lines in flie:
line = lines.replace("\n", "").split(",")
if line[0] is not '':
data.append(line[1:])
label.append(a[b[name]])
hh += 1
data = numpy.array(data, dtype=float)
label = numpy.array(label, dtype=float)
# 归一化
minw = data.min(0)
maxw = data.max(0)
ranges = maxw - minw
h = data.shape[0]
data = (data - numpy.tile(minw, (h, 1))) / numpy.tile(ranges, (h, 1))
# print(label)
return data,label此函数将数据从文件中读取出,并将标签列表加入后转为矩阵,将数据归一化后返回。
3.划分数据集
def huafen(): sss = StratifiedShuffleSplit(n_splits=4, test_size=0.2, train_size=0.8) for train_index, test_index in sss.split(data, label): train_data, test_data = data[train_index], data[test_index] train_label, test_label = label[train_index], label[test_index] # print(train_data.shape, test_data.shape) return train_data, train_label, test_data, test_label
此函数将数据划分成训练集和测试集按照8:2的交叉划分。
4.KNN
def knn(inX,k):
trainsize = train_data.shape[0]
train1_data = (numpy.tile(inX, (trainsize, 1)) - train_data) ** 2
train2_data = ((train1_data.sum(axis=1)) ** 0.5).argsort()
classCount = numpy.zeros((test_label.shape[1]))
for i in range(k):
classCount += train_label[train2_data[i]]
maxClass = classCount.max()
for i in range(test_label.shape[1]):
if classCount[i] != maxClass:
classCount[i] = 0
else:
classCount[i] = 1
maxClass = float('inf')
return classCount使用的距离为欧式距离,k值可以自己传入
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)