การเรียนรู้ของเครื่อง - การถดถอยพหุคูณ
การถดถอยพหุคูณ
การถดถอยพหุคูณก็เหมือนกับการถดถอยเชิงเส้นแต่มีค่าอิสระมากกว่าหนึ่งค่า หมายความว่าเราพยายามทำนายค่าโดยอิงจากตัวแปรสองตัวหรือมากกว่า
ดูชุดข้อมูลด้านล่างซึ่งมีข้อมูลเกี่ยวกับรถยนต์บางส่วน
รถ | แบบอย่าง | ปริมาณ | น้ำหนัก | CO2 |
โตโยต้า | Aygo | 1000 | 790 | 99 |
มิตซูบิชิ | สเปซสตาร์ | 1200 | 1160 | 95 |
Skoda | Citigo | 1000 | 929 | 95 |
เฟียต | 500 | 900 | 865 | 90 |
มินิ | คูเปอร์ | 1500 | 1140 | 105 |
VW | ขึ้น! | 1000 | 929 | 105 |
Skoda | ฟาเบีย | 1400 | 1109 | 90 |
Mercedes | ห้องเรียน | 1500 | 1365 | 92 |
ฟอร์ด | เฟียสต้า | 1500 | 1112 | 98 |
Audi | A1 | 1600 | 1150 | 99 |
ฮุนได | I20 | 1100 | 980 | 99 |
ซูซูกิ | Swift | 1300 | 990 | 101 |
ฟอร์ด | เฟียสต้า | 1000 | 1112 | 99 |
ฮอนด้า | พลเมือง | 1600 | 1252 | 94 |
ฮุนได | I30 | 1600 | 1326 | 97 |
Opel | Astra | 1600 | 1330 | 97 |
BMW | 1 | 1600 | 1365 | 99 |
มาสด้า | 3 | 2200 | 1280 | 104 |
Skoda | รวดเร็ว | 1600 | 1119 | 104 |
ฟอร์ด | จุดสนใจ | 2000 | 1328 | 105 |
ฟอร์ด | มอนดีโอ | 1600 | 1584 | 94 |
Opel | เครื่องราชอิสริยาภรณ์ | 2000 | 1428 | 99 |
Mercedes | C-Class | 2100 | 1365 | 99 |
Skoda | Octavia | 1600 | 1415 | 99 |
วอลโว่ | S60 | 2000 | 1415 | 99 |
Mercedes | CLA | 1500 | 1465 | 102 |
Audi | A4 | 2000 | 1490 | 104 |
Audi | A6 | 2000 | 1725 | 114 |
วอลโว่ | V70 | 1600 | 1523 | 109 |
BMW | 5 | 2000 | 1705 | 114 |
Mercedes | E-Class | 2100 | 1605 | 115 |
วอลโว่ | XC70 | 2000 | 1746 | 117 |
ฟอร์ด | บี-แม็กซ์ | 1600 | 1235 | 104 |
BMW | 2 | 1600 | 1390 | 108 |
Opel | ซาฟิรา | 1600 | 1405 | 109 |
Mercedes | SLK | 2500 | 1395 | 120 |
เราสามารถคาดการณ์การปล่อย CO2 ของรถยนต์ตามขนาดของเครื่องยนต์ แต่ด้วยการถดถอยหลายครั้ง เราสามารถใส่ตัวแปรเพิ่มเติม เช่น น้ำหนักของรถ เพื่อให้การคาดการณ์แม่นยำยิ่งขึ้น
มันทำงานอย่างไร?
ใน Python เรามีโมดูลที่จะทำงานให้เรา เริ่มต้นด้วยการนำเข้าโมดูล Pandas
import pandas
เรียนรู้เกี่ยวกับโมดูล Pandas ในการสอน Pandasของ เรา
โมดูล Pandas ช่วยให้เราอ่านไฟล์ csv และส่งคืนวัตถุ DataFrame
ไฟล์นี้มีขึ้นเพื่อการทดสอบเท่านั้น คุณสามารถดาวน์โหลดได้ที่นี่: cars.csv
df = pandas.read_csv("cars.csv")
จากนั้นทำรายการค่าอิสระและเรียกตัวแปรX
นี้
ใส่ค่าที่ขึ้นต่อกันในตัวแปรที่เรียกว่าy
.
X = df[['Weight', 'Volume']]
y = df['CO2']
เคล็ดลับ: เป็นเรื่องปกติที่จะตั้งชื่อรายการของค่าอิสระด้วยตัวพิมพ์ใหญ่ X และรายการของค่าที่ไม่ขึ้นต่อกันด้วยตัวพิมพ์เล็ก y
เราจะใช้วิธีการบางอย่างจากโมดูล sklearn ดังนั้น เราจะต้องนำเข้าโมดูลนั้นด้วย:
from sklearn import linear_model
จากโมดูล sklearn เราจะใช้LinearRegression()
เมธอดเพื่อสร้างออบเจกต์การถดถอยเชิงเส้น
ออบเจ็กต์นี้มีเมธอดที่เรียกfit()
ซึ่งรับค่าอิสระและค่าที่ขึ้นต่อกันเป็นพารามิเตอร์ และเติมออบเจกต์การถดถอยด้วยข้อมูลที่อธิบายความสัมพันธ์:
regr = linear_model.LinearRegression()
regr.fit(X, y)
ตอนนี้ เรามีวัตถุถดถอยที่พร้อมจะทำนายค่า CO2 ตามน้ำหนักและปริมาตรของรถ:
#predict the CO2 emission of a car where the weight
is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])
ตัวอย่าง
ดูตัวอย่างการใช้งานจริงทั้งหมด:
import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr =
linear_model.LinearRegression()
regr.fit(X, y)
#predict the CO2
emission of a car where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)
ผลลัพธ์:
[107.2087328]
เราได้คาดการณ์ไว้ว่ารถยนต์ที่มีเครื่องยนต์ 1.3 ลิตร และน้ำหนัก 2300 กิโลกรัม จะปล่อยคาร์บอนไดออกไซด์ออกมาประมาณ 107 กรัมต่อทุกๆ กิโลเมตรที่ขับ
ค่าสัมประสิทธิ์
สัมประสิทธิ์เป็นปัจจัยที่อธิบายความสัมพันธ์กับตัวแปรที่ไม่รู้จัก
ตัวอย่าง: ถ้าx
เป็นตัวแปร ก็
2x
คือx
สองครั้ง x
เป็นตัวแปรที่ไม่รู้จัก และตัวเลข2
คือสัมประสิทธิ์
ในกรณีนี้ เราสามารถขอค่าสัมประสิทธิ์น้ำหนักเทียบกับ CO2 และปริมาตรเทียบกับ CO2 ได้ คำตอบที่เราได้รับบอกเราว่าจะเกิดอะไรขึ้นหากเราเพิ่มหรือลดหนึ่งในค่าอิสระ
ตัวอย่าง
พิมพ์ค่าสัมประสิทธิ์ของวัตถุถดถอย:
import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr =
linear_model.LinearRegression()
regr.fit(X, y)
print(regr.coef_)
ผลลัพธ์:
[0.00755095 0.00780526]
อธิบายผลลัพธ์
อาร์เรย์ผลลัพธ์แสดงถึงค่าสัมประสิทธิ์ของน้ำหนักและปริมาตร
น้ำหนัก: 0.00755095
ระดับเสียง: 0.00780526
ค่าเหล่านี้บอกเราว่าหากน้ำหนักเพิ่มขึ้น 1 กิโลกรัม การปล่อย CO2 จะเพิ่มขึ้น 0.00755095 กรัม
และถ้าขนาดเครื่องยนต์ (Volume) เพิ่มขึ้น 1 ซม. 3การปล่อย CO2 จะเพิ่มขึ้น 0.00780526 กรัม
ฉันคิดว่านั่นเป็นการเดาที่ยุติธรรม แต่มาทดสอบกัน!
เราได้คาดการณ์ไว้แล้วว่าหากรถยนต์ที่มีเครื่องยนต์ขนาด 1300 ซม. 3มีน้ำหนัก 2300 กก. การปล่อย CO2 จะอยู่ที่ประมาณ 107 กรัม
จะเกิดอะไรขึ้นถ้าเราเพิ่มน้ำหนักเป็น 1,000 กิโลกรัม?
ตัวอย่าง
คัดลอกตัวอย่างจากเมื่อก่อน แต่เปลี่ยนน้ำหนักจาก 2300 เป็น 3300:
import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr =
linear_model.LinearRegression()
regr.fit(X, y)
predictedCO2 = regr.predict([[3300, 1300]])
print(predictedCO2)
ผลลัพธ์:
[114.75968007]
เราได้คาดการณ์ไว้ว่ารถยนต์ที่มีเครื่องยนต์ 1.3 ลิตร และน้ำหนัก 3300 กิโลกรัม จะปล่อยคาร์บอนไดออกไซด์ออกมาประมาณ 115 กรัมต่อทุกๆ กิโลเมตรที่ขับ
ซึ่งแสดงว่าสัมประสิทธิ์ 0.00755095 ถูกต้อง:
107.2087328 + (1000 * 0.00755095) = 114.75968