From LAB to Production – จาก Machine Learning Model สู่ Flask RESTful

จาก Kaggle – วิธีการใช้ Logistic Regression บนข้อมูล Iris เราได้ Model มาแล้ว แต่ จะนำสู่ Production ได้อย่างไร ? ใน Python มี Object Serialization ทำให้สามารถเก็บ Object ที่สร้างขึ้น ไปไว้ในไฟล์ ซึ่ง มีให้ใช้หลายตัว ได้แก่ pickle cpickle joblib มีคนทำการทดสอบความเร็ว พบว่า cpickle เร็วสุด (https://stackoverflow.com/questions/12615525/what-are-the-different-use-cases-of-joblib-versus-pickle) แต่ในที่นี้ จะใช้ joblib เพราะน่าจะเหมาะกับงานที่ต้องมีการ Load Data ขนาดใหญ่ ใช้งานร่วมกันหลาย Process (เท่าที่เข้าใจครับ) การสร้างไฟล์ .pkl บน kaggle ดังนี้ เพิ่มคำสั่งต่อไปนี้ แล้ว กดปุ่ม commit and run ด้านบนขวา from sklearn.externals import joblib joblib.dump(model, ‘myiris.pkl’) กดปุ่ม รูป << ด้าน ซ้ายบน เพื่อกลับไป หน้า Kernel ของเรา คลิกที่ Output จะเห็นไฟล์ ที่เพิ่งสร้าง ให้คลิก Download ไปเก็บไว้ใน Folder ที่จะใช้งาน Productioin ต่อไป จะเป็นขั้นตอนการติดตั้ง และการใช้ Flask ซึ่งเป็น Python Microframework  และ ใช้ Flask RESTful เพื่อสร้าง REST API ใช้คำสั่งต่อไปนี้ ติดตั้ง flask และ flask-resetful pip install flask flask-restful จากนั้น เข้าไปใน folder ที่เราวางไฟล์ myiris.pkl ไว้ แล้ว สร้างไฟล์ iris.py มี Code ดังนี้ from flask import Flask, request from flask_restful import Resource, Api, reqparse from sklearn.externals import joblib import pandas as pd #from sklearn.linear_model import LogisticRegression app = Flask(__name__) api = Api(app) # Model model = joblib.load(‘myiris.pkl’) class Iris(Resource): def get(self): return { “greeting”:”Hello From IRIS Dataset”} def post(self): parser = reqparse.RequestParser() parser.add_argument(‘sl’) parser.add_argument(‘sw’) parser.add_argument(‘pl’) parser.add_argument(‘pw’) args = parser.parse_args() x = pd.DataFrame([[ args[‘sl’],args[‘sw’], args[‘pl’],args[‘pw’] ]] ,\ columns=[‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’]) result = model.predict(x) return {“result”: result[0]}, 201 api.add_resource(Iris, “/iris”) app.run(debug=True) จากนั้น ไปที่ Command Prompt พิมพ์คำสั่งต่อไปนี้ เพื่อเรียก Flask

Read More »

Kaggle – วิธีการใช้ Logistic Regression บนข้อมูล Iris

ข้อมูล Iris Dataset มักจะใช้ในการเริ่มต้นศึกษาการใช้งาน เครื่องมือทาง Data Science โดยเฉพาะ Classification เพราะไม่ซับซ้อน มี 4 ฟิลด์ ที่ใช้เป็น Features และมี 1 ฟิลด์ ที่จะเป็น Class (มี 3 Categories) เริ่มจาก New Kernel ในที่นี้ เลือก Notebook จากนั้น เลือก Add Dataset จากที่เค้ามีให้ หรือ จะ Upload ขึ้นไปก็ได้ จากนั้น ข้อมูลของเราจะมาอยู่ที่  ../input/ ในกรณีเรามีไฟล์ ../input/iris.data จาก Code ที่ให้มาในเบื้องต้น ให้กดปุ่ม Shift+Enter หรือ กดเครื่องหมาย Run ด้าน ซ้ายมือ ก็จะได้ผลดังนี้ จากนั้น มาเขียน Code กัน เริ่มจาก Import Package ที่ต้องใช้ import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline สร้างตัวแปร iris อ่านข้อมูลจากไฟล์ iris = pd.read_csv(‘../input/iris.data’) สำรวจข้อมูลเบื้องต้น iris.head() iris.info() iris.describe() ลองทำ Data Visualization เบื้องต้น ด้วย pairplot แยกตามสีของ species sns.pairplot(iris, hue=’species’) หรือ จะดูเป็น scatterplot plt.scatter(iris[‘sepal_length’], iris[‘sepal_width’], marker=’.’, color=’r’) plt.xlabel(‘Sepal Length’) plt.ylabel(‘Sepal Width’) ต่อไป เป็นขั้นตอนการแบ่งข้อมูลออกเป็น 2 ส่วน สำหรับ Train และ Test from sklearn.model_selection import train_test_split X = iris.drop([‘species’], axis=1) Y = iris[‘species’] X_train, X_test, y_train, y_test = train_test_split(X,Y, test_size=0.3) จากนั้น Train Model from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train) แล้วก็ ตรวจสอบความแม่นยำ Model Evaluation prediction = model.predict(X_test) from sklearn.metrics import confusion_matrix, classification_report, accuracy_score ขั้นตอนไม่ยากครับ ส่วนว่าเราจะเลือกใช้ Model ไหน ทำอะไร อันนี้ต้องมาดูรายละเอียดกันต่อครับ

Read More »

Introduction to Kaggle – เรียนรู้การงานด้าน Data Science

Kaggle เป็นแพลตฟอร์มสำหรับ Predictive Modelling และการแข่งขันด้าน Analytics เพื่อหา Model ที่ดีที่สุดสำหรับ Dataset จากบริษัทและบุคคลทั่วไป [อันนี้ คำอธิบายอย่างเป็นทางการ [1] ] กล่าวให้ง่ายกว่านั้น Kaggle เป็นสนามทดลองสำหรับคนที่อยากจะทำงานด้าน Data Science โดย ไม่ต้องนับ 0 จากการติดตั้ง OS, Software โน่นนี่นั่น, Library ต่างๆ แล้วต้อง Configuration ให้ทำงานร่วมกันได้ อีกทั้ง เพียงแค่ สมัคร หรือ Authentication ด้วย Facebook, Google, Yahoo แล้ว สร้าง Profile ของตัวเอง เป็นอันเรียบร้อย หลังจากนั้น เราจะได้ “Kernel” ซึ่งจริง ๆ ก็คือ Virtual Machine ที่พร้อมใช้งาน สเปคเครื่องคือ [2] 4 CPU 16 GB RAM 6 Hours Execution Time 1 GB of disk space เอาไว้เก็บ Output จากการทำงาน สามารถใช้ GPU ในการคำนวณได้ด้วย ติดตั้ง Jupyter Notebook – Interactive Web สำหรับเขียน Code ภาษา Python/R เพื่อวิเคราะห์ข้อมูลได้ สามารถเพิ่ม Collaborator เข้ามาร่วมงานกันได้ด้วย ทั้งในส่วนของ Kernel และ Dataset ส่วนต่อไปคือ Dataset ก็จะมีผู้คนทั่วโลกได้ Upload ที่เปิด “Public” ให้พวกเราได้ลองวิเคราะห์กัน รวมถึง เราสามารถนำข้อมูลของเราเอง ขึ้นไปวิเคราะห์ก็ได้ โดยกำหนดให้เป็น “Private” ก็ได้เช่นกัน ชนิดของ Dataset ประกอบด้วย CSV JSON SQLite Archives BigQuery นอกจากนั้น ยังมีส่วนของการเรียนรู้ จาก Learn [3] ให้ศึกษาได้ตั้งแต่ การเขียนโปรแกรมภาษา Python, Machine Learning, Pandas, Data Visualization, SQL, R, Deep Learning สรุปคือ จากที่ทดลองทำผิดทำถูกมานานเป็นเวลา 2 ปีกว่า เพื่อ “สร้าง” ระบบของตนเอง (โดยพยายามสร้าง Hadoop Cluster + Spark) และ การศึกษาการเรียนภาษา Python บนเครื่อง Notebook ของตนเอง ซึ่งพบว่า เมื่อมีการประมวลผลหนัก ๆ เครื่อง  Core i5 , 8 GB ก็ยังหน่วง ๆ ไม่ไปไหนมาไหนเลย หลังจากได้ลองใช้ Kaggle ในเวลาไม่นาน ก็เข้าใจ Concept ของ Data Science มากขึ้น   ในบทความต่อ ๆ ไป จะมาแสดงตัวอย่างการใช้งานครับ ตอนนี้ ดู Youtube ไปพลาง ๆ What’s Kaggle? Introduction to Kaggle Kernels How to Make a Data Science Project with Kaggle   Reference: [1] https://en.wikipedia.org/wiki/Kaggle

Read More »

การใช้งาน Google Datalab Notebook บน Dataproc เพื่อสร้าง Machine Learning Model เบื้องต้น

ต่อจาก สร้าง Hadoop และ Spark Cluster เพื่องานด้าน Data Science ด้วย Google Cloud Dataproc + Datalab จาก Google Cloud Datalab คลิก Notebookแล้ว ตั้งชื่อ Demo01 เลือได้ว่า จะใช้ Python2 หรือ Python3 ในที่นี้จะเลือก Python3 ตรวจสอบรุ่นของ Spark ที่ใช้งานด้วยคำสั่ง spark.version แล้วกดปุ่ม Shift+Enter เพื่อ Run สามารถใช้คำสั่งไปย้ง Shell ซึ่งเป็น Linux ได้ โดยใช้เครื่องหมาย ! นำหน้า ในที่นี้ จะ Download iris dataset จาก https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data มาไว้ในเครื่อง mycluster-m ด้วย คำสั่ง ! wget https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data แล้ว เอาไปใส่ใน HDFS ด้วยคำสั่ง ! hdfs dfs -put iris.data / จะได้ผลประมาณนี้ จาก Machine Learning #01 – Python with iris dataset ซึ่งเดิมใช้ sklearn จะเปลี่ยนเป็น Spark MLlib เพื่อใช้ความสามารถของ Spark Cluster ได้ เริ่มต้นจาก Import Library ที่จำเป็นดังนี้ # Import Libaries from pyspark.ml import Pipeline from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.ml.classification import LogisticRegression from pyspark.ml.tuning import ParamGridBuilder, CrossValidator from pyspark.ml.feature import VectorAssembler from pyspark.sql.types import * จากนั้น สร้าง Spark Dataframe (Concept จะคล้ายกับ Pandas แต่มีรายละเอียดที่มากกว่า) # get into DataFrame csvFile = spark.read.csv(‘/iris.data’, inferSchema=True) diz = {“Iris-setosa”:”1″, “Iris-versicolor”:”2″, “Iris-virginica”:”3″ } df = csvFile.na.replace(diz,1,”_c4″) df2 = df.withColumn(“label”,df[“_c4”].cast(IntegerType())) \ .withColumnRenamed(“_c0″,”sepal_length”) \ .withColumnRenamed(“_c1″,”sepal_width”) \ .withColumnRenamed(“_c2″,”petal_length”) \ .withColumnRenamed(“_c3″,”petal_width”) train,test = df2.randomSplit([0.75,0.25]) เริ่มจาก ให้ spark session (spark) อ่านไฟล์ CSV จาก HDFS /iris.data โดยระบุว่า ให้กำหนด Data Type อัตโนมัติ (inforSchema=True) และไฟล์นี้ไม่มี Header Dataset นี้ ประกอบด้วย 5 columns เมื่อ Spark อ่านข้อมูลเข้ามา จะตั้งชื่อ column เป็น _c0, _c1, _c2, _c3, _c4 โดย _c4 จะเป็น label ของชนิดของดอก iris ซึ่งกำหนดเป็น String => Iris-setosa, Iris-vesicolor,

Read More »

ปัญหาการ Debug บางคำสั่งใน .NET Web Project (VS.NET 2013)

ในการพัฒนา web application ด้วย Visual Studio.NET 2013 ผู้พัฒนาบางท่าน อาจจะเคยเจอปัญหาเมื่อ debug ไปถึงบางคำสั่งแล้ว คำสั่งไม่ทำงานตามที่ควรจะเป็น หรือบางครั้งก็ไม่มีการ return ค่าออกมา ทั้ง ๆ ที่ค่าของข้อมูลถูกต้อง ซึ่งหากเจอปัญหานี้แล้ว ให้ลองสังเกตดังต่อไปนี้ เครื่องที่ใช้พัฒนาเป็น Windows 32 bit หรือ 64 bit ตรวจสอบแน่ใจแล้วว่าใช้งานคำสั่งได้ถูกต้อง และข้อมูลที่คำสั่งนี้นำไปประมวลผลมีความถูกต้องแล้ว ถ้าเครื่องที่ใช้เป็น Windows 64 bit ให้ทดลองทำตามดังนี้ คือ ไปที่เมนู TOOLS –> Options จะปรากฏหน้าต่าง Options เมนูด้านซ้ายมือของหน้าต่าง Options เลือกเมนูย่อย Projects and Solutions และภายใต้เมนูนี้ เลือกเมนูย่อย Web Projects จะเห็นตัวเลือกด้านขวามือสองตัวเลือก ให้เลือกเครื่องหมายถูกตัวเลือกแรก คือ Use the 64 version… คลิกปุ่ OK และทดลอง run project และ debug คำสั่งที่พบปัญหาอีกครั้ง   ตัวอย่างคำสั่งที่พบปัญหา สำหรับตัวอย่างคำสั่งที่เคยพบปัญหาเมื่อทำการ debug คือ คำสั่งที่ใช้ในการอ่านข้อมูลจาก registry Registry.LocalMachine.OpenSubKey โดยคำสั่งนี้จะอ่านข้อมูลจาก registry ตาม key ที่ระบุ  โดยรายละเอียดปัญหาที่พบคือ มีข้อมูลใน registry ตาม key ที่ระบุจริง แต่ตอน debug กลับ return ค่าว่างกลับมา  ซึ่งหากไปใช้ใน projects ที่เป็น Windows และทำการ debug คำสั่งนี้จะ return ข้อมูลออกมาได้ถูกต้อง

Read More »