一、使用随机森林对系统参数进行故障诊断
1、模型选择
sklearn的随机森林+多输出结果模型
model=MultiOutputClassifier(RandomForestClassifier())
2、模型类型
属于分类模型,即判断系统的n个参数是否正确,或是否属于特定的类型。
举例:如参数是否属于正常的范围0~100之内,或者参数属于状态【正常、警告、故障】中的哪一状态
3、模型建立过程
提供系统n个参数的拟合数据=参数取值数据+结果标签数据,不能欠拟合和过拟合的数据,否则诊断结果可能出现误诊的情况。
举例:一个系统有3个参数温度a、整机状态b、传感器状态c,参数定义如下
温度a取值20~30正常、低于20和高于30异常;#20~30、小于20、大于20为参数取值数据,正常、异常是结果标签数据整机状态b取值0为正常、1为异常;#0、1为参数取值数据,正常、异常为结果标签数据传感器状态c取值0为正常、1为警告、2为故障#0、1、2为参数取值数据,正常、警告、故障为结果标签数据拟合数据和结果标签数据:
[正常,正常,正常]
[异常,异常,正常]
[正常,正常,故障
这样的数据需要足够多,如产生10万条数据,能将实际可能产生的数据都囊括完。产生了拟合数据之后,将数据输入给模型即可完成建模。
注意:产生数据的原则就是数据不要出现欠拟合和过拟合的情况。
欠拟合数据:
只产生了100条数据,不能囊括所有情况;特征数据太少,如一个系统本应由10个参数决定状态,这里只有3个参数。【通过增加数据和特征值解决】
过拟合数据:
产生的数据有错误,如把温度取值100当做了正常;特征值过多,如一个系统本应由2个参数决定状态,这里有3个【通过增加正确数据,减少噪声(多余的特征值)解决】
4、参数诊断及定位
通过输入真实参数取值到模型,模型即可输出对应的标签。如
输入:[25,0,0]
模型输出:[正常,正常,正常]
5、关于迭代
二、使用线性回归对系统参数进行故障诊断
sklearn的线性回归
lr=LinearRegression()2、其他和随机森林类似
模型类型、模型建立过程、参数诊断及定位和上面随机森林皆一致
3、不同之处
随机森林将大量的数据进行简单的分类,是1就是1,是2就是2,然后根据输入的真实数据,在模型中匹配最佳可能结果标签,然后输出最大概率的诊断结果
可根据实际情况选择不同模型。
greytheory的gm11【gm21还未在实际项目中使用】
grey=GreyTheory()gm11=grey.gm11
对单个参数的预测,单调性参数使用gm11,周期性参数使用gm21【随机性参数使用gm31】
如判断一个单调性参数1天后取值是多少。
举例:
某个单调增的参数,如一个城市的人口数,从今天器往前每隔1天取1次数,取1000次:
如果取值越多、间隔越小,预测结果越准确。
4、参数预测
输入:今天之前每隔1天取值,共1000次取值
模型输出:今天作为起点,1天之后的人口数预测
无法迭代,gm11是属于数学公式计算,需要每次输入多个历史取值,根据历史取值推测数下一个取值。
四、结合正态分布对数据的分析
1、参数对象
具备正态分布取值的数据。一般项目中大多数数据都属于正态分布,参数取值一般有个正常的取值范围A~B,而往往这个参数不会真正取值到A~B,而是集中在这个范围的更小一个范围。如一个器件的额定电压为220V,由于自带过压、欠压保护,即使电压上下浮动20V,也可让器件正常运行,一旦超过20V便可能损坏。而在实际运行中,如果每隔1s对输入电压采样,共采1万次【足够大】,可以发现取值往往在额定电压220V上下2~5V波动【举例,可能更小或更大】,故我们可以认为取值220V的概率更大,随着取值离220V越大,概率越小,也就是正态分布【简单的描述:正态分布就是概率与取值呈现单峰的参数,项目中可以假设一切范围取值类参数都呈正态分布,布尔、枚举类肯定不是】。
2、随机分布和正态分布图例
随机分布认为采样的数据中,200V~240V中任一电压和其他电压出现的频率一致【即概率大致相同】;正态分布认为有一个电压出现频率最高,然后频率向两边取值逐渐降低。
随机分布
正态分布
3、作用
4、参数描述
注意:由于参数取值往往是float型的,如果阈值范围较大,建议转化为int类型来处理,否则众数、中位数的结果可能出现问题。如参数范围是100.0~200.0,参数大概率取值范围是150~160,这个区间被取了1000次,由于float类型,可能导致150~160之间分成了很多份,使这个区间的同一数据被取得的次数较少;由于意外100~120之间有个数是110被取到了10次,故众数可能从150~160变成了110。
5、模型选择
numpy【用于数据生成、数据分析】、scipy【判断是否属于正态分布、数据分析】
五、使用梯度下降对系统整机进行故障诊断
sklearn的SGD模型
model=SGDClassifier(shuffle=True,loss='log')SGD可在线迭代,可是不能多参数输出
温度a取值20~30正常、低于20和高于30异常;整机状态b取值0为正常、1为异常;传感器状态c取值0为正常、1为警告、2为故障此模型只能有一个标签,故定义:只要有一个参数异常,则认为系统整机异常【0为正常,1为异常】