設備參數設定與發生不良類型分析 (三)

情境: 另解 回首頁

    • 某製程需要有兩種機台 (甲與乙) 共同操作。

    • 生產時,甲機台有兩項參數可調整 (FactorX1, FactorY1)。

    • 生產時,乙機台有兩項參數可調整 (FactorX2, FactorY2)。

    • 機台參數調整後,導至製成品發生三種變異 (A, B, C)。

問題

    • 是否可以在產生時,藉由機台參數之設定,便可預判製成品變異種類?

輸出

MeanDecreaseGini FactorX1 6.543479 FactorY1 1.971758 FactorX2 28.674444 FactorY2 31.147999

訓練.A 訓練.B 訓練.C 測試.A 測試.B 測試.C A 33 0 0 17 0 0 B 0 33 0 0 17 1 C 0 0 38 0 0 11

程式碼

library(randomForest) library(RColorBrewer) rm(list=ls()) sink("RE-7.log") RE.TRAIN <- NULL RE.TEST <- NULL RE.Summary <- NULL RE.NumFields <- NULL LoadData <- function(csvFile='RE.csv') { RE.Data <- read.csv(csvFile) } SummaryData <- function(RE=RE.Data) { options(digits=1) fieldNames <- colnames(RE) i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) Summary.Field <- c(summary(RE[, fieldName]), sd(RE[, fieldName])) if (is.null(RE.Summary)) { assign('RE.Summary', Summary.Field, envir = .GlobalEnv) } else { assign('RE.Summary', rbind(RE.Summary, Summary.Field), envir = .GlobalEnv) } } } i = 1 for (fieldName in fieldNames) { if (class(RE[, fieldName]) == 'numeric') { rownames(RE.Summary)[i] <- fieldName i = i + 1 } } colnames(RE.Summary)[7] <- 'StdDev.' RE.Summary } CoVarianceData <- function(RE=RE.Data) { options(digits=2) if (is.null(RE.NumFields)) { fieldNames <- colnames(RE) i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) } } } cov(RE[, RE.NumFields]) } CoRelationData <- function(RE=RE.Data) { options(digits=2) if (is.null(RE.NumFields)) { fieldNames <- colnames(RE) i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) } } } cor(RE[, RE.NumFields]) } SampleData <- function(TrainPortion=0.8, RE=RE.Data) { sampleSeed <- floor(unclass(Sys.time())) set.seed(sampleSeed) TempData <- sample(2, nrow(RE), replace=TRUE, prob=c(TrainPortion, 1 - TrainPortion)) assign('RE.TRAIN', RE[TempData==1, ], envir = .GlobalEnv) assign('RE.TEST', RE[TempData==2, ], envir = .GlobalEnv) } DicisionTree <- function(linearModel, factorField='Failure') { RE.Model <- linearModel RE.TREE <- randomForest(RE.Model, data=RE.TRAIN, ntree=100, proximity=TRUE) print (importance(RE.TREE)) S <- table(predict(RE.TREE, newdata=RE.TRAIN), RE.TRAIN[, factorField]) colnames(S) <- paste('\u8a13\u7df4', colnames(S), sep='.') T <- table(predict(RE.TREE, newdata=RE.TEST), RE.TEST[, factorField]) colnames(T) <- paste('\u6e2c\u8a66', colnames(T), sep='.') RE.DECISION <- cbind(S, T) print (RE.DECISION) chartName <- paste('DT3', 'RE', sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=2048, height=2048, res=300) par(mfrow=c(3, 1)) plot(RE.TREE, main='\u9810\u6e2c\u6a21\u578b') varImpPlot(RE.TREE, main='\u56e0\u5b50\u5f71\u97ff\u9810\u6e2c\u7a0b\u5ea6') plot(margin(RE.TREE, RE.TEST[, factorField]), main='\u9810\u6e2c\u6e96\u78ba\u5ea6') dev.off() } PlotCharts <- function(RE=RE.Data) { fieldNames <- colnames(RE) if (is.null(RE.NumFields)) { i = 0 for (fieldName in fieldNames) { i = i + 1 if (class(RE[, fieldName]) == 'numeric') { assign('RE.NumFields', c(RE.NumFields, i), envir = .GlobalEnv) } } } for (fieldID in RE.NumFields) { fieldName <- fieldNames[fieldID] chartName <- paste('HIST', 'RE', fieldName, sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=1024, height=768, res=300) par(mfrow=c(1, 2)) hist(RE[, fieldName], xlab=fieldName, main='\u76f4\u65b9\u5716') plot(density(RE[, fieldName]), main='\u5bc6\u5ea6\u5716') dev.off() } chartName <- paste('COR', 'RE', sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=4096, height=4096, res=300) pairs(RE) dev.off() } PlotScatterChart <- function(xFieldName, yFieldName, factorField='Failure', RE=RE.Data) { Plot.Legend <- as.numeric(RE.Data[, factorField]) Plot.NumLegend <- max(Plot.Legend) Plot.Colors <- rainbow(Plot.NumLegend) Plot.Char <- seq(1, Plot.NumLegend+1, 1) chartName <- paste('XY', 'RE', xFieldName, yFieldName, sep='-') fileName <- paste(chartName, 'png', sep='.') png(fileName, width=1024, height=960, res=300) plot(RE.Data[, xFieldName], RE.Data[, yFieldName], col=Plot.Colors, pch=Plot.Legend, cex=1, main='\u6563\u5e03\u5716', xlab=xFieldName, ylab=yFieldName) legend("topright", col=Plot.Colors, pch=Plot.Char, cex=1, legend=unique(RE.Data[, factorField])) dev.off() } ## Main jobTask = c(FALSE, TRUE, FALSE) RE.Data <- LoadData() if (jobTask[1]) { SummaryData(RE.Data) CoRelationData(RE.Data) CoVarianceData(RE.Data) } if (jobTask[2]) { SampleData(0.7) DicisionTree(Failure ~ FactorX1 + FactorY1 + FactorX2 + FactorY2) } if (jobTask[3]) { PlotCharts() PlotScatterChart('FactorX1', 'FactorY1') PlotScatterChart('FactorX2', 'FactorY2') } sink()