AI พร้อม Python - การเตรียมข้อมูล

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

บทนี้มุ่งเน้นไปที่การเตรียมข้อมูลสำหรับอัลกอริทึมการเรียนรู้ของเครื่อง

การประมวลผลข้อมูลล่วงหน้า

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

ขั้นตอนการประมวลผลข้อมูลล่วงหน้า

ทำตามขั้นตอนเหล่านี้เพื่อประมวลผลข้อมูลล่วงหน้าใน Python -

Step 1 − Importing the useful packages - ถ้าเราใช้ Python นี่จะเป็นขั้นตอนแรกในการแปลงข้อมูลให้อยู่ในรูปแบบที่แน่นอนนั่นคือการประมวลผลล่วงหน้า สามารถทำได้ดังนี้ -

import numpy as np
import sklearn.preprocessing

ที่นี่เราได้ใช้สองแพ็คเกจต่อไปนี้ -

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

  • Sklearn.preprocessing - แพ็คเกจนี้มีฟังก์ชั่นยูทิลิตี้ทั่วไปมากมายและคลาสหม้อแปลงเพื่อเปลี่ยนเวกเตอร์คุณลักษณะดิบให้เป็นตัวแทนที่เหมาะสำหรับอัลกอริทึมการเรียนรู้ของเครื่อง

Step 2 − Defining sample data - หลังจากนำเข้าแพ็กเกจแล้วเราจำเป็นต้องกำหนดข้อมูลตัวอย่างบางส่วนเพื่อให้เราสามารถใช้เทคนิคการประมวลผลล่วงหน้ากับข้อมูลนั้นได้ ตอนนี้เราจะกำหนดข้อมูลตัวอย่างต่อไปนี้ -

input_data = np.array([2.1, -1.9, 5.5],
                      [-1.5, 2.4, 3.5],
                      [0.5, -7.9, 5.6],
                      [5.9, 2.3, -5.8])

Step3 − Applying preprocessing technique - ในขั้นตอนนี้เราจำเป็นต้องใช้เทคนิคก่อนการประมวลผลใด ๆ

ส่วนต่อไปนี้อธิบายถึงเทคนิคการประมวลผลข้อมูลล่วงหน้า

เทคนิคการประมวลผลข้อมูลล่วงหน้า

เทคนิคสำหรับการประมวลผลข้อมูลล่วงหน้ามีการอธิบายไว้ด้านล่าง -

ไบนาไรเซชั่น

นี่คือเทคนิคก่อนการประมวลผลที่ใช้เมื่อเราต้องการแปลงค่าตัวเลขเป็นค่าบูลีน เราสามารถใช้เมธอด inbuilt เพื่อแยกข้อมูลอินพุตออกเป็นสองส่วนโดยใช้ 0.5 เป็นค่า threshold ด้วยวิธีต่อไปนี้ -

data_binarized = preprocessing.Binarizer(threshold = 0.5).transform(input_data)
print("\nBinarized data:\n", data_binarized)

หลังจากรันโค้ดด้านบนแล้วเราจะได้ผลลัพธ์ต่อไปนี้ค่าทั้งหมดที่สูงกว่า 0.5 (ค่าเกณฑ์) จะถูกแปลงเป็น 1 และค่าทั้งหมดที่ต่ำกว่า 0.5 จะถูกแปลงเป็น 0

Binarized data

[[ 1. 0. 1.]
[ 0. 1. 1.]
[ 0. 0. 1.]
[ 1. 1. 0.]]

หมายถึงการกำจัด

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

print("Mean = ", input_data.mean(axis = 0))
print("Std deviation = ", input_data.std(axis = 0))

เราจะได้ผลลัพธ์ต่อไปนี้หลังจากเรียกใช้โค้ดด้านบน -

Mean = [ 1.75       -1.275       2.2]
Std deviation = [ 2.71431391  4.20022321  4.69414529]

ตอนนี้โค้ดด้านล่างจะลบค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานของข้อมูลอินพุต -

data_scaled = preprocessing.scale(input_data)
print("Mean =", data_scaled.mean(axis=0))
print("Std deviation =", data_scaled.std(axis = 0))

เราจะได้ผลลัพธ์ต่อไปนี้หลังจากเรียกใช้โค้ดด้านบน -

Mean = [ 1.11022302e-16 0.00000000e+00 0.00000000e+00]
Std deviation = [ 1.             1.             1.]

การปรับขนาด

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

# Min max scaling

data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0,1))
data_scaled_minmax = data_scaler_minmax.fit_transform(input_data)
print ("\nMin max scaled data:\n", data_scaled_minmax)

เราจะได้ผลลัพธ์ต่อไปนี้หลังจากเรียกใช้โค้ดด้านบน -

Min max scaled data

[ [ 0.48648649  0.58252427   0.99122807]
[   0.          1.           0.81578947]
[   0.27027027  0.           1.        ]
[   1.          0. 99029126  0.        ]]

Normalization

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

L1 Normalization

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

# Normalize data
data_normalized_l1 = preprocessing.normalize(input_data, norm = 'l1')
print("\nL1 normalized data:\n", data_normalized_l1)

บรรทัดด้านบนของโค้ดจะสร้างผลลัพธ์ต่อไปนี้ & miuns;

L1 normalized data:
[[ 0.22105263  -0.2          0.57894737]
[ -0.2027027    0.32432432   0.47297297]
[  0.03571429  -0.56428571   0.4       ]
[  0.42142857   0.16428571  -0.41428571]]

L2 Normalization

นอกจากนี้ยังเรียกว่า least squares. การนอร์มัลไลเซชันประเภทนี้จะปรับเปลี่ยนค่าเพื่อให้ผลรวมของกำลังสองเป็น 1 ในแต่ละแถวเสมอ สามารถนำไปใช้กับข้อมูลอินพุตด้วยความช่วยเหลือของรหัส Python ต่อไปนี้ -

# Normalize data
data_normalized_l2 = preprocessing.normalize(input_data, norm = 'l2')
print("\nL2 normalized data:\n", data_normalized_l2)

บรรทัดด้านบนของรหัสจะสร้างผลลัพธ์ต่อไปนี้ -

L2 normalized data:
[[ 0.33946114  -0.30713151   0.88906489]
[ -0.33325106   0.53320169   0.7775858 ]
[  0.05156558  -0.81473612   0.57753446]
[  0.68706914   0.26784051  -0.6754239 ]]

การติดฉลากข้อมูล

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

ขั้นตอนการเข้ารหัสฉลาก

ทำตามขั้นตอนเหล่านี้เพื่อเข้ารหัสป้ายกำกับข้อมูลใน Python -

Step1 − Importing the useful packages

หากเราใช้ Python นี่จะเป็นขั้นตอนแรกในการแปลงข้อมูลให้อยู่ในรูปแบบที่แน่นอนเช่นการประมวลผลล่วงหน้า สามารถทำได้ดังนี้ -

import numpy as np
from sklearn import preprocessing

Step 2 − Defining sample labels

หลังจากนำเข้าแพ็กเกจเราจำเป็นต้องกำหนดป้ายกำกับตัวอย่างเพื่อที่เราจะสามารถสร้างและฝึกตัวเข้ารหัสฉลากได้ ตอนนี้เราจะกำหนดป้ายกำกับตัวอย่างต่อไปนี้ -

# Sample input labels
input_labels = ['red','black','red','green','black','yellow','white']

Step 3 − Creating & training of label encoder object

ในขั้นตอนนี้เราต้องสร้างตัวเข้ารหัสฉลากและฝึกมัน รหัส Python ต่อไปนี้จะช่วยในการทำสิ่งนี้ -

# Creating the label encoder
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)

ต่อไปนี้จะเป็นผลลัพธ์หลังจากรันโค้ด Python ด้านบน -

LabelEncoder()

Step4 − Checking the performance by encoding random ordered list

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

# encoding a set of labels
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)

ฉลากจะได้รับการพิมพ์ดังนี้ -

Labels = ['green', 'red', 'black']

ตอนนี้เราสามารถรับรายการค่าที่เข้ารหัสเช่นป้ายคำที่แปลงเป็นตัวเลขได้ดังนี้ -

print("Encoded values =", list(encoded_values))

ค่าที่เข้ารหัสจะได้รับการพิมพ์ดังนี้ -

Encoded values = [1, 2, 0]

Step 5 − Checking the performance by decoding a random set of numbers −

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

# decoding a set of values
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
print("\nEncoded values =", encoded_values)

ตอนนี้ค่าที่เข้ารหัสจะถูกพิมพ์ออกมาดังนี้ -

Encoded values = [3, 0, 4, 1]
print("\nDecoded labels =", list(decoded_list))

ตอนนี้ค่าที่ถอดรหัสจะได้รับการพิมพ์ดังนี้ -

Decoded labels = ['white', 'black', 'yellow', 'green']

ติดป้ายกำกับข้อมูลที่ไม่มีป้ายกำกับ v / s

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

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

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