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)