收工到場時已經錯過第一位講者講的WebVR。第二位分享用elm這個前端應用開發的經驗,只有少量Javascript認識的我只記得它是讓開發者可以寫完後compile成HTML+CSS+JS,因為先編譯,就不會等到執行時才出現運行時期的錯誤。第三位的標題很吸引,『如何用十分鐘開發Facebook Bot』。原來前排見過的應用程式是透過這種工具開發。這技術可以充當你專頁的回覆的機械人,也可以是當FB Messager成為你應用程式的用戶介面。講者用的應該是PHP,網上也有其他用Node.JS,Python 的示範。
「[程式開發] Facebook Messenger 聊天機器人 API 環境建置 教學 (Node.JS)」
「用 Python 開發 Facebook Bot」
第二節開始的一個講者介紹API.AI,雖然示範的只是特定句子的對答,但API.AI這家被Google收購了機械人對話開發公司,還做到更多型式的文字/語音辨析。然後見到R、Python這些比較有親切感的語言。 R有電鋸陳分享他在Network Analysis的過程中,用Rcpp套件以C寫looping 的經驗,這樣編譯和運行的時間可以比用apply function的即譯式更快。之後嘗試rJava時可以留意這個用法吧。不過他的分享中其實有很多時間是放在解釋研究的方法:怎樣的數據形式、什麼是Network analysis 的Triad Census。他做過的分析和文章可以參考明報的報道,報道版當時也讓我深感佩服,原來香港還是有做數據分析的人。
「通識導賞﹕佔領時代的facebook專頁版塊巴爾幹化社會網絡分析」
「數據新聞:香港網絡生態系列之三 沒有最撕裂 只有更撕裂——後佔領時代的Facebook專頁板塊」
用Python 的Andy展示的是所謂Machine Learning、Deep Learning 今天已經可以如何容易地做到。示範用 Keras套件 以神經網絡Neural Network 的方式分辨男或女的面孔照片。有男女各大約1300+ 張相片,32*32 pixel的黑白大頭照。轉換成共約2800行1024列的數據集。2/3 Training, 1/3 Testing。想想這件事應該可以用R 做吧?如果先準備好代表這些相片的矩陣,就可以讓R做緊接的神經網絡分析。數據仍需要準備,但Coding的例子呢? 有,Google 一下就找到 R-Bloggers 上的Coding 例子:
「Fitting a neural network in R; neuralnet package」
### Data set.seed(500) library(MASS) data <- Boston apply(data,2,function(x) sum(is.na(x))) index <- sample(1:nrow(data),round(0.75*nrow(data))) train <- data[index,] test <- data[-index,] ### Linear Model lm.fit <- glm(medv~., data=train) summary(lm.fit) pr.lm <- predict(lm.fit,test) MSE.lm <- sum((pr.lm - test$medv)^2)/nrow(test) ### Neutral Network Model #
Neutral Network -
Prepare normalization maxs <- apply(data, 2, max) mins <- apply(data, 2, min) scaled <- as.data.frame(scale(data, center = mins, scale = maxs - mins)) train_ <- scaled[index,] test_ <- scaled[-index,] #
Neutral Network -
Fitting library(neuralnet) n <- names(train_) f <- as.formula(paste("medv ~", paste(n[!n %in% "medv"], collapse = " + "))) # set formula as med ~ . nn <- neuralnet(f,data=train_,hidden=c(5,3),linear.output=T) # neutral network as hidden layer (5,3) neutrons plot(nn) #
Neutral Network -
Prediction pr.nn_ <- compute(nn,test_[,1:13]) pr.nn <- (pr.nn_$net.result) * (max(data$medv)-min(data$medv))+min(data$medv) # Compare Performance test.r <- (test_$medv) * (max(data$medv)-min(data$medv))+min(data$medv) MSE.nn <- sum((test.r - pr.nn)^2)/nrow(test_) print(paste(MSE.lm,MSE.nn)) par(mfrow=c(1,2)) plot(test$medv,pr.nn_,col='red',main='Real vs predicted NN',pch=18,cex=0.7) abline(0,1,lwd=2) legend('bottomright',legend='NN',pch=18,col='red', bty='n') plot(test$medv,pr.lm,col='blue',main='Real vs predicted lm',pch=18, cex=0.7) abline(0,1,lwd=2) legend('bottomright',legend='LM',pch=18,col='blue', bty='n', cex=.95) plot(test$medv,pr.nn_,col='red',main='Real vs predicted NN',pch=18,cex=0.7) points(test$medv,pr.lm,col='blue',pch=18,cex=0.7) abline(0,1,lwd=2) legend('bottomright',legend=c('NN','LM'),pch=18,col=c('red','blue'))
沒有留言:
張貼留言