KNN对机器故障的识别

举报
Famine_wang 发表于 2018/12/31 15:37:32 2018/12/31
【摘要】 此项目使用KNN算法对机器故障进行识别,机器共有三类故障,每个数据包含两个特征,标签及为机器故障的种类。
  1. 项目简介

    此项目使用KNN算法对机器故障进行识别,机器共有三类故障,每个数据包含两个特征,标签及为机器故障的种类。

  2. 数据预处理

# 读取数据
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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。