การเรียนรู้ของเครื่อง - มาตราส่วน
คุณสมบัติมาตราส่วน
เมื่อข้อมูลของคุณมีค่าต่างกันและแม้แต่หน่วยการวัดที่ต่างกัน ก็อาจเปรียบเทียบได้ยาก กิโลกรัมเทียบกับเมตรคืออะไร? หรือความสูงเมื่อเทียบกับเวลา?
คำตอบสำหรับปัญหานี้คือการปรับขนาด เราสามารถปรับขนาดข้อมูลให้เป็นค่าใหม่ที่เปรียบเทียบได้ง่ายขึ้น
ดูตารางด้านล่าง เป็นชุดข้อมูลเดียวกับที่เราใช้ใน บทถดถอยพหุคูณแต่คราวนี้คอลัมน์ปริมาตร มีค่าเป็น ลิตรแทนที่จะเป็นcm 3 (1.0 แทน 1000)
ไฟล์นี้มีขึ้นเพื่อการทดสอบเท่านั้น คุณสามารถดาวน์โหลดได้ที่นี่: cars2.csv
รถ | แบบอย่าง | ปริมาณ | น้ำหนัก | CO2 |
โตโยต้า | Aygo | 1.0 | 790 | 99 |
มิตซูบิชิ | สเปซสตาร์ | 1.2 | 1160 | 95 |
Skoda | Citigo | 1.0 | 929 | 95 |
เฟียต | 500 | 0.9 | 865 | 90 |
มินิ | คูเปอร์ | 1.5 | 1140 | 105 |
VW | ขึ้น! | 1.0 | 929 | 105 |
Skoda | ฟาเบีย | 1.4 | 1109 | 90 |
Mercedes | ห้องเรียน | 1.5 | 1365 | 92 |
ฟอร์ด | เฟียสต้า | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
ฮุนได | I20 | 1.1 | 980 | 99 |
ซูซูกิ | Swift | 1.3 | 990 | 101 |
ฟอร์ด | เฟียสต้า | 1.0 | 1112 | 99 |
ฮอนด้า | พลเมือง | 1.6 | 1252 | 94 |
ฮุนได | I30 | 1.6 | 1326 | 97 |
Opel | Astra | 1.6 | 1330 | 97 |
BMW | 1 | 1.6 | 1365 | 99 |
มาสด้า | 3 | 2.2 | 1280 | 104 |
Skoda | รวดเร็ว | 1.6 | 1119 | 104 |
ฟอร์ด | จุดสนใจ | 2.0 | 1328 | 105 |
ฟอร์ด | มอนดีโอ | 1.6 | 1584 | 94 |
Opel | เครื่องราชอิสริยาภรณ์ | 2.0 | 1428 | 99 |
Mercedes | C-Class | 2.1 | 1365 | 99 |
Skoda | Octavia | 1.6 | 1415 | 99 |
วอลโว่ | S60 | 2.0 | 1415 | 99 |
Mercedes | CLA | 1.5 | 1465 | 102 |
Audi | A4 | 2.0 | 1490 | 104 |
Audi | A6 | 2.0 | 1725 | 114 |
วอลโว่ | V70 | 1.6 | 1523 | 109 |
BMW | 5 | 2.0 | 1705 | 114 |
Mercedes | E-Class | 2.1 | 1605 | 115 |
วอลโว่ | XC70 | 2.0 | 1746 | 117 |
ฟอร์ด | บี-แม็กซ์ | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
Opel | ซาฟิรา | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
การเปรียบเทียบปริมาตร 1.0 กับน้ำหนัก 790 อาจเป็นเรื่องยาก แต่ถ้าเราปรับขนาดทั้งสองให้เป็นค่าที่เปรียบเทียบกันได้ เราจะเห็นได้อย่างง่ายดายว่าค่าหนึ่งเทียบกับอีกค่าหนึ่งมีค่าเท่าใด
มีวิธีการต่างๆ สำหรับการปรับขนาดข้อมูล ในบทช่วยสอนนี้ เราจะใช้วิธีการที่เรียกว่าการทำให้เป็นมาตรฐาน
วิธีการมาตรฐานใช้สูตรนี้:
z = (x - u) / s
z
ค่าใหม่
อยู่ที่ไหน คือค่า x
เดิม
u
คือค่ากลาง และs
ค่าเบี่ยงเบนมาตรฐาน
หากคุณนำ คอลัมน์ น้ำหนักจากชุดข้อมูลข้างต้น ค่าแรกคือ 790 และค่าที่ปรับขนาดจะเป็น:
(790 - ) / = -2.1
หากคุณนำ คอลัมน์ โวลุ่มจากชุดข้อมูลด้านบน ค่าแรกคือ 1.0 และค่าที่ปรับขนาดจะเป็น:
(1.0 - ) / = -1.59
ตอนนี้คุณสามารถเปรียบเทียบ -2.1 กับ -1.59 แทนการเปรียบเทียบ 790 กับ 1.0
คุณไม่จำเป็นต้องทำสิ่งนี้ด้วยตนเอง โมดูล Python sklearn มีเมธอดที่เรียกว่าStandardScaler()
ซึ่งส่งคืนอ็อบเจกต์ Scaler ด้วยวิธีการแปลงชุดข้อมูล
ตัวอย่าง
ปรับขนาดค่าทั้งหมดในคอลัมน์น้ำหนักและปริมาตร:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
scaledX = scale.fit_transform(X)
print(scaledX)
ผลลัพธ์:
โปรดทราบว่าค่าสองค่าแรกคือ -2.1 และ -1.59 ซึ่งสอดคล้องกับการคำนวณของเรา:
[[-2.10389253 -1.59336644] [-0.55407235 -1.07190106] [-1.52166278 -1.59336644] [-1.78973979 -1.85409913] [-0.63784641 -0.28970299] [-1.52166278 -1.59336644] [-0.76769621 -0.55043568] [ 0.3046118 -0.28970299] [-0.7551301 -0.28970299] [-0.59595938 -0.0289703 ] [-1.30803892 -1.33263375] [-1.26615189 -0.81116837] [-0.7551301 -1.59336644] [-0.16871166 -0.0289703 ] [ 0.14125238 -0.0289703 ] [ 0.15800719 -0.0289703 ] [ 0.3046118 -0.0289703 ] [-0.05142797 1.53542584] [-0.72580918 -0.0289703 ] [ 0.14962979 1.01396046] [ 1.2219378 -0.0289703 ] [ 0.5685001 1.01396046] [ 0.3046118 1.27469315] [ 0.51404696 -0.0289703 ] [ 0.51404696 1.01396046] [ 0.72348212 -0.28970299] [ 0.8281997 1.01396046] [ 1.81254495 1.01396046] [ 0.96642691 -0.0289703 ] [ 1.72877089 1.01396046] [ 1.30990057 1.27469315] [ 1.90050772 1.01396046] [-0.23991961 -0.0289703 ] [ 0.40932938 -0.0289703 ] [ 0.47215993 -0.0289703 ] [ 0.4302729 2.31762392]]
ทำนายค่า CO2
งานในบทการถดถอยพหุคูณคือการคาดการณ์การปล่อย CO2 จากรถยนต์เมื่อคุณรู้เพียงน้ำหนักและปริมาตรเท่านั้น
เมื่อมีการปรับขนาดชุดข้อมูล คุณจะต้องใช้มาตราส่วนเมื่อคุณคาดการณ์ค่า:
ตัวอย่าง
ทำนายการปล่อย CO2 จากรถยนต์ 1.3 ลิตรที่มีน้ำหนัก 2300 กิโลกรัม:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
scaledX = scale.fit_transform(X)
regr = linear_model.LinearRegression()
regr.fit(scaledX, y)
scaled =
scale.transform([[2300, 1.3]])
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
ผลลัพธ์:
[107.2087328]