CNTK - แบบจำลองการถดถอย

ในที่นี้เราจะศึกษาเกี่ยวกับการวัดประสิทธิภาพเกี่ยวกับแบบจำลองการถดถอย

พื้นฐานของการตรวจสอบความถูกต้องของแบบจำลองการถดถอย

ดังที่เราทราบดีว่าแบบจำลองการถดถอยนั้นแตกต่างจากแบบจำลองการจำแนกประเภทในแง่ที่ว่าไม่มีการวัดความถูกหรือผิดแบบไบนารีสำหรับกลุ่มตัวอย่างของแต่ละบุคคล ในแบบจำลองการถดถอยเราต้องการวัดว่าการคาดคะเนมีค่าใกล้เคียงกับค่าจริงเพียงใด ยิ่งค่าการทำนายใกล้เคียงกับผลลัพธ์ที่คาดหวังมากเท่าใดโมเดลก็จะทำงานได้ดีขึ้นเท่านั้น

ที่นี่เราจะวัดประสิทธิภาพของ NN ที่ใช้สำหรับการถดถอยโดยใช้ฟังก์ชันอัตราความผิดพลาดที่แตกต่างกัน

กำลังคำนวณขอบข้อผิดพลาด

ดังที่กล่าวไว้ก่อนหน้านี้ในขณะที่ตรวจสอบความถูกต้องของแบบจำลองการถดถอยเราไม่สามารถบอกได้ว่าการคาดการณ์ถูกหรือผิด เราต้องการให้การคาดการณ์ของเราใกล้เคียงกับมูลค่าที่แท้จริงมากที่สุด แต่ข้อผิดพลาดเล็กน้อยเป็นที่ยอมรับได้ที่นี่

สูตรคำนวณระยะขอบข้อผิดพลาดมีดังนี้ -

ที่นี่

Predicted value = ระบุ y ด้วยหมวก

Real value = ทำนายโดย y

ขั้นแรกเราต้องคำนวณระยะห่างระหว่างค่าที่คาดการณ์และมูลค่าจริง จากนั้นเพื่อให้ได้อัตราความผิดพลาดโดยรวมเราต้องรวมระยะทางกำลังสองเหล่านี้และคำนวณค่าเฉลี่ย นี้เรียกว่าmean squared ฟังก์ชันข้อผิดพลาด

แต่ถ้าเราต้องการตัวเลขประสิทธิภาพที่แสดงความคลาดเคลื่อนเราจำเป็นต้องมีสูตรที่แสดงถึงข้อผิดพลาดที่แน่นอน สูตรสำหรับmean absolute ฟังก์ชันข้อผิดพลาดมีดังนี้ -

สูตรข้างต้นใช้ระยะห่างสัมบูรณ์ระหว่างค่าที่คาดการณ์และมูลค่าจริง

ใช้ CNTK เพื่อวัดประสิทธิภาพการถดถอย

ที่นี่เราจะดูวิธีใช้เมตริกต่างๆซึ่งเราได้พูดคุยร่วมกับ CNTK เราจะใช้แบบจำลองการถดถอยซึ่งทำนายไมล์ต่อแกลลอนสำหรับรถยนต์โดยใช้ขั้นตอนที่ระบุด้านล่าง

ขั้นตอนการดำเนินการ

Step 1 - ขั้นแรกเราต้องนำเข้าส่วนประกอบที่จำเป็นจาก cntk แพคเกจดังนี้ -

from cntk import default_option, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import relu

Step 2 - ต่อไปเราต้องกำหนดฟังก์ชันการเปิดใช้งานเริ่มต้นโดยใช้ไฟล์ default_optionsฟังก์ชั่น. จากนั้นสร้างชุดเลเยอร์ตามลำดับใหม่และจัดเตรียมเลเยอร์หนาแน่นสองชั้นพร้อมเซลล์ประสาท 64 เซลล์ จากนั้นเพิ่มเลเยอร์ Dense เพิ่มเติม (ซึ่งจะทำหน้าที่เป็นเลเยอร์เอาต์พุต) ให้กับชุดเลเยอร์ลำดับและให้ 1 เซลล์ประสาทโดยไม่มีการกระตุ้นดังนี้ -

with default_options(activation=relu):
model = Sequential([Dense(64),Dense(64),Dense(1,activation=None)])

Step 3- เมื่อสร้างเครือข่ายแล้วเราจำเป็นต้องสร้างคุณสมบัติการป้อนข้อมูล เราต้องตรวจสอบให้แน่ใจว่ามันมีรูปร่างเหมือนกับคุณสมบัติที่เรากำลังจะใช้สำหรับการฝึกอบรม

features = input_variable(X.shape[1])

Step 4 - ตอนนี้เราต้องสร้างใหม่ input_variable ที่มีขนาด 1 จะใช้เพื่อเก็บค่าที่คาดไว้สำหรับ NN

target = input_variable(1)
z = model(features)

ตอนนี้เราจำเป็นต้องฝึกโมเดลและเพื่อที่จะทำเช่นนั้นเราจะแยกชุดข้อมูลและดำเนินการก่อนการประมวลผลโดยใช้ขั้นตอนการใช้งานต่อไปนี้ -

Step 5− ขั้นแรกให้นำเข้า StandardScaler จาก sklearn.preprocessing เพื่อรับค่าระหว่าง -1 ถึง +1 สิ่งนี้จะช่วยเราในการป้องกันปัญหาการไล่ระดับสีใน NN

from sklearn.preprocessing import StandardScalar

Step 6 - จากนั้นนำเข้า train_test_split จาก sklearn.model_selection ดังต่อไปนี้

from sklearn.model_selection import train_test_split

Step 7 - วางไฟล์ mpg คอลัมน์จากชุดข้อมูลโดยใช้ dropวิธี. ในที่สุดแยกชุดข้อมูลออกเป็นชุดการฝึกอบรมและการตรวจสอบความถูกต้องโดยใช้train_test_split ฟังก์ชันดังต่อไปนี้ -

x = df_cars.drop(columns=[‘mpg’]).values.astype(np.float32)
y=df_cars.iloc[: , 0].values.reshape(-1, 1).astype(np.float32)
scaler = StandardScaler()
X = scaler.fit_transform(x)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

Step 8 - ตอนนี้เราจำเป็นต้องสร้าง input_variable อื่นที่มีขนาด 1 ซึ่งจะใช้เพื่อเก็บค่าที่คาดไว้สำหรับ NN

target = input_variable(1)
z = model(features)

เราได้แยกและประมวลผลข้อมูลล่วงหน้าแล้วตอนนี้เราต้องฝึก NN เช่นเดียวกับในส่วนก่อนหน้าขณะสร้างแบบจำลองการถดถอยเราจำเป็นต้องกำหนดชุดค่าผสมของการสูญเสียและmetric ฟังก์ชั่นในการฝึกโมเดล

import cntk
def absolute_error(output, target):
   return cntk.ops.reduce_mean(cntk.ops.abs(output – target))
@ cntk.Function
def criterion_factory(output, target):
   loss = squared_error(output, target)
   metric = absolute_error(output, target)
   return loss, metric

ตอนนี้เรามาดูวิธีใช้แบบจำลองที่ได้รับการฝึกฝน สำหรับแบบจำลองของเราเราจะใช้เกณฑ์การผลิตเป็นเกณฑ์การสูญเสียและเมตริกรวมกัน

from cntk.losses import squared_error
from cntk.learners import sgd
from cntk.logging import ProgressPrinter
progress_printer = ProgressPrinter(0)
loss = criterion_factory (z, target)
learner = sgd(z.parameters, 0.001)
training_summary=loss.train((x_train,y_train),parameter_learners=[learner],callbacks=[progress_printer],minibatch_size=16,max_epochs=10)

ตัวอย่างการใช้งานที่สมบูรณ์

from cntk import default_option, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import relu
with default_options(activation=relu):
model = Sequential([Dense(64),Dense(64),Dense(1,activation=None)])
features = input_variable(X.shape[1])
target = input_variable(1)
z = model(features)
from sklearn.preprocessing import StandardScalar
from sklearn.model_selection import train_test_split
x = df_cars.drop(columns=[‘mpg’]).values.astype(np.float32)
y=df_cars.iloc[: , 0].values.reshape(-1, 1).astype(np.float32)
scaler = StandardScaler()
X = scaler.fit_transform(x)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
target = input_variable(1)
z = model(features)
import cntk
def absolute_error(output, target):
   return cntk.ops.reduce_mean(cntk.ops.abs(output – target))
@ cntk.Function
def criterion_factory(output, target):
loss = squared_error(output, target)
metric = absolute_error(output, target)
return loss, metric
from cntk.losses import squared_error
from cntk.learners import sgd
from cntk.logging import ProgressPrinter
progress_printer = ProgressPrinter(0)
loss = criterion_factory (z, target)
learner = sgd(z.parameters, 0.001)
training_summary=loss.train((x_train,y_train),parameter_learners=[learner],callbacks=[progress_printer],minibatch_size=16,max_epochs=10)

เอาต์พุต

-------------------------------------------------------------------
average  since   average   since  examples
loss     last    metric    last
------------------------------------------------------
Learning rate per minibatch: 0.001
690       690     24.9     24.9       16
654       636     24.1     23.7       48
[………]

ในการตรวจสอบความถูกต้องของแบบจำลองการถดถอยของเราเราจำเป็นต้องตรวจสอบให้แน่ใจว่าแบบจำลองจัดการข้อมูลใหม่เช่นเดียวกับที่ทำกับข้อมูลการฝึกอบรม สำหรับสิ่งนี้เราต้องเรียกใช้ไฟล์test วิธีการ loss และ metric รวมกับข้อมูลการทดสอบดังนี้ -

loss.test([X_test, y_test])

เอาต์พุต

{'metric': 1.89679785619, 'samples': 79}