Skip to content

Kor's blog Posts

เรียนรู้ Machine learning ลุยเขียนโค้ดก่อนเลยดีไหม?

ผมเป็นคนนึงที่ถ้าจะศึกษาอะไรมักจะลงมือก่อนเพราะคิดว่าทำไปเรียนรู้ไป เดี๋ยวก็เข้าใจเอง ติดตรงไหนค่อยไปอ่านใน document ตอนที่ศึกษา machine learning ก็เหมือนกัน คือรู้มาบ้างว่ามันคืออะไร concept เป็นยังไง ก็ตั้งโจทย์ขึ้นมาแล้วก็ download พวก machine learning library ของภาษาที่อยากเขียนมาลองทำตาม sample code, document ไปเรื่อยๆ ซึ่งก็แน่นอนว่าได้ผลลัพธ์ตาม document อยู่แล้ว

สำหรับอะไรที่มันตรงไปตรงมาหรือเป็นความรู้เฉพาะอย่าง programming language เราสามารถลงมือเขียนเลยได้ เขียนบ่อยๆ เดี๋ยวก็เขียนเป็น (เขียนเป็นกับเขียนได้ดีคนละเรื่องนะ) แต่กับ machine learning แล้วผมรู้สึกว่ามันทำแบบนั้นไม่ได้ เพราะเป็นสาขาวิชาประยุกต์เลยมีพื้นฐานหลายอย่างที่เราต้องรู้ก่อนลงมือทำ เลยอยากบันทึกสิ่งที่เกิดขึ้นระหว่างที่ผมเรียนรู้ machine learning เสียหน่อย

Continue reading เรียนรู้ Machine learning ลุยเขียนโค้ดก่อนเลยดีไหม?

Leave a Comment

Machine Learning #9 | Gradient Descent

โพสต์ที่แล้ว เรารู้อัลกอริทึมของ Linear Regression ไปแล้วว่ามันทำงานยังไงแต่มีอีก task ที่เราต้องสนใจคือการ optimize ค่า Cost function ให้น้อยที่สุดเพื่อให้ได้ model ที่ fit กับ training set ที่สุด ตัวอย่างที่แล้วผมกำหนดให้ เราเลยได้กราฟความสัมพันธ์ระหว่าง กับ เป็นเส้นโค้งหงายขึ้นเป็นรูปถ้วย (blow shape)…

Continue reading Machine Learning #9 | Gradient Descent

Leave a Comment

ทดลองใช้ Redis cache ข้อความยาวๆ เพื่อดูการใช้ memory

Update: หลังจากตามอ่านเรื่อง memory optimization ของ Redis แล้วพบว่า default config <datatype>-max-ziplist-entries และ <datatype>-max-ziplist-value ซึ่งในกรณีนี้คือ hash-max-ziplist-entries และ hash-max-ziplist-value ไม่เหมาะสมกับข้อความที่ใช้ในการทดลอง เพราะ Redis จะ encode ข้อมูลก็ต่อเมื่อขนาดหรือจำนวนข้อมูลน้อยกว่า hash-max-ziplist-entries และ hash-max-ziplist-value ที่ เรา set ไว้ โดย default จะเป็น 512 และ 64 ตามลำดับ

Redis เป็น in-memory key-value storage ที่นิยมใส่เข้ามาใน software stack เพื่อ cache ข้อมูล ในเว็บ official ของ Redis เองแนะนำว่ากรณีที่เราใช้ set เก็บข้อมูลจะใช้ memory เยอะ ยิ่งขนาดข้อมูลยาวก็ยิ่งใช้เยอะ เลยแนะนำให้ใช้ hset จะดีกว่าเพราะข้อมูลจะถูก encode ใน memory ดีกว่า ทำให้ใช้ memory น้อยกว่า โดย time complexity ยังเป็น O(1) เท่าเดิม Continue reading ทดลองใช้ Redis cache ข้อความยาวๆ เพื่อดูการใช้ memory

Leave a Comment

Machine Learning #8 | Linear Regression ตอนที่ 2

โพสต์ที่แล้วเกี่ยวกับ Linear Regression เราพอจะรู้ concept คร่าวๆ แล้วสิ่งที่เราต้องสนใจคือ

  1. สมการ hypothesis h(\theta) = \theta_0 + \theta_1x
  2. การ represent ข้อมูลกับ cost function J(\theta_0, \theta_1) =\frac{1}{2m}\sum^{m}_{i=1} (h_{\theta}(x^{i} ) -  y^{i})^2
  3. และเป้าหมายของเราคือการ minimize cost function

Continue reading Machine Learning #8 | Linear Regression ตอนที่ 2

1 Comment

Publish Docker image ไปที่ DockerHub

บังเอิญว่าผมต้องติดตั้ง Node 6 ไว้บน CentOS 6.7 แต่ CentOS 6.7 ไม่มี C++11 ทำให้ติดตั้ง module ที่เป็น native บางตัวไม่ได้ ก็เลยต้องหา repo ของ devtoolset มาติดตั้ง gcc และ g++ version >= 5

ไหนๆ ก็ทำแล้วและต้องแชร์ให้ชาวบ้านเลย publish ขึ้น DockerHub ขอเขียนวิธี publish ไว้สักหน่อย Continue reading Publish Docker image ไปที่ DockerHub

Leave a Comment

Go | ทำความเข้าใจการทำงานของ Go Interface

ภาษา Go สามารถ define type พิเศษได้ (struct เหมือนใน C/C++) และสามารถสร้าง type ที่เป็น interface ได้ด้วย และเนื่องจาก Go ไม่มีแนวคิดเรื่อง Class มันเลยยอมให้ type พิเศษเหล่านั้นสามารถมี activity ที่ทำร่วมกับมันได้ โดยใช้  method

เพื่อให้เข้าใจการทำงาน ลองดูโค้ดกากๆ ของผมข้างล่างนี้ครับ Continue reading Go | ทำความเข้าใจการทำงานของ Go Interface

Leave a Comment

Node.js | Test doubles ด้วย Sinon.js

การทำ unit test คือการทดสอบโค้ดโดยไม่สน dependencies ภายนอกอย่างเช่น database CRUD, Web services, APIs เพราะ unit test คือการทดสอบแค่การทำงานของฟังก์ชันนั้นๆ ว่าเป็นไปตาม flow ทำงานได้ถูกต้องตาม logic หรือไม่ เพื่อเป็นการลดความยุ่งยากเราจึงต้องจำลองการทำงานของโค้ดส่วนที่มีการติดต่อกับภายนอก Continue reading Node.js | Test doubles ด้วย Sinon.js

Leave a Comment