Ինչպես տվյալները բաժանել ուսուցման և փորձարկման Python-ում առանց Sklearn-ի


Մեքենայական ուսուցման կամ արհեստական ինտելեկտի մոդելների տիրույթում տվյալները հիմք են հանդիսանում: Այս տվյալների մշակման ձևը ձևավորում է մոդելի ամբողջական կատարումը: Սա ներառում է տվյալների բազան ուսուցման և ստուգման խմբերի բաժանելու անփոխարինելի խնդիրը: Թեև sklearn-ի train_test_split()-ը հաճախ կիրառվող մեթոդ է, կարող են լինել դեպքեր, երբ Python-ի սիրահարը կարող է այն չունենալ իր տրամադրության տակ կամ հետաքրքրված է հասկանալ, թե ինչպես ձեռքով հասնել նմանատիպ արդյունքի: Այս դիսկուրսը խորանում է այն մասին, թե ինչպես կարելի է տվյալները տարանջատել ուսուցման և ստուգման հավաքածուների մեջ՝ առանց հենվելու sklearn-ին: Այս նպատակի համար մենք կօգտագործենք Python-ի ներկառուցված գրադարանները:

Օրինակ 1. Տվյալների տարանջատման հիմքում ընկած հիմնավորումը

Նախքան ընկույզների և պտուտակների մեջ ընկղմելը, եկեք անդրադառնանք հիմնավորմանը: Մեքենայական ուսուցման ալգորիթմներին անհրաժեշտ է մեծ քանակությամբ տվյալներ՝ դրանցից քաղելու համար: Այս տվյալները՝ ուսումնական հավաքածուն, օգնում են մոդելին վերծանել օրինաչափությունները և ձևակերպել կանխատեսումներ: Այնուամենայնիվ, մոդելի հմտությունը չափելու համար մեզ անհրաժեշտ են տվյալներ, որոնց մոդելը նախկինում չի ենթարկվել: Այս անձեռնմխելի տվյալները ստուգման հավաքածուն են:

Ուսուցման և ստուգման համար նույնական տվյալների օգտագործումը կհանգեցնի գերհարմարեցված մոդելի առաջացմանը. Հետևաբար, տվյալները սովորաբար բաժանվում են 70-30 կամ 80-20 համամասնության, որտեղ ավելի մեծ հատվածն օգտագործվում է սովորելու համար, իսկ փոքրը՝ ստուգման համար:

Տվյալների ձեռքով տարանջատում Python-ում

Մենք կսկսենք տվյալների տարանջատման պարզ, բայց արդյունավետ եղանակով՝ օգտագործելով Python-ի ներկառուցված գործողությունները: Այստեղ օգտագործվող նմուշը ամբողջ թվերի ցանկն է, սակայն տեխնիկան կիրառելի է տվյալների ցանկացած տեսակի համար:

Ենթադրենք, որ մենք ունենք տվյալների բազայի տվյալներ հետևյալ կերպ.

data = list(range(1, 101))  # data is a list of integers from 1 to 100
  • Նպատակակետը այս տվյալները բաժանելն է 80% ուսումնական տվյալների և 20% ստուգման տվյալների:

  • Սկզբում մենք կներմուծենք անհրաժեշտ գրադարանը:

  • Պատահական մոդուլն առաջարկում է մի շարք գործառույթներ՝ պատահական թվեր ստեղծելու համար, և մենք այն կօգտագործենք մեր տվյալները խառնելու համար: Հետագայում մենք կխառնենք մեր տվյալները:

  • Տվյալները խառնելուց հետո մենք դրանք կտարանջատենք ուսուցման և ստուգման խմբերի

Split_index-ը թելադրում է այն կետը, որտեղ տվյալները ստանում են երկտող: Մենք այն հաշվարկում ենք որպես split_ratio-ի և տվյալների բազայի չափի արտադրյալ:

Ի վերջո, մենք օգտագործում ենք կտրատում ուսուցման և ստուգման տվյալների հավաքածուները ստեղծելու համար:

Ուսուցման տվյալները բաղկացած են տարրերից՝ սկսած ցուցակի սկզբից մինչև split_index, իսկ ստուգման տվյալները կազմված են տարրերից՝ սկսած split_index-ից մինչև ցուցակի ավարտը:

Օրինակ

import random
random.shuffle(data)

split_ratio = 0.8  # We are using an 80-20 split here
split_index = int(split_ratio * len(data))

train_data = data[:split_index]
test_data = data[split_index:]

Արդյունք

train_data = [65, 51, 8, 82, 15, 32, 11, 74, 89, 29, 50, 
34, 93, 84, 37, 7, 1, 83, 17, 24, 5, 33, 49, 90, 35, 57, 
47, 73, 46, 95, 10, 80, 59, 94, 63, 27, 31, 52, 18, 76, 
91, 71, 20, 68, 70, 87, 26, 64, 99, 42, 61, 69, 79, 12, 
3, 66, 96, 75, 30, 22, 100, 14, 97, 56, 55, 58, 28, 23, 
98, 6, 2, 88, 43, 41, 78, 60, 72, 39]

test_data = [45, 53, 48, 16, 9, 62, 13, 81, 92, 54, 21, 
38, 25, 44, 85, 19, 40, 77, 67, 4]

Քանի որ կոդը ներառում է տվյալների պատահական խառնում, արդյունքը կարող է տարբերվել ամեն անգամ, երբ փորձում եք այն գործարկել:

Օրինակ 2. Numpy-ի օգտագործումը տվյալների տարանջատման համար

Տվյալների առանց sklearn-ի տարանջատման մեկ այլ տեխնիկա է անփույթ գրադարանի օգտագործումը: Numpy-ն հզոր գրադարան է թվային հաշվարկների համար և կարող է օգտագործվել զանգվածներ կառուցելու և դրանք արդյունավետ կերպով շահարկելու համար:

Ահա թե ինչպես կարող եք տարանջատել տվյալները՝ օգտագործելով numpy.

  • Նախ, ներմուծեք numpy գրադարանը: Այնուհետև, կառուցեք անհարթ զանգված:

  • Խառնել զանգվածը: Ի վերջո, բաժանեք զանգվածը:

Ցուցանիշը ներկայացնում է այն կետը, երբ մեր տվյալների ֆոնդը բաժանվում է ուսուցման և ստուգման ենթաբազմությունների: Այն ձեռք է բերվել՝ օգտագործելով կանխորոշված բաժանման հարաբերակցության արտադրյալը (մեր օրինակում՝ 0,8՝ 80-20 բաժանման դեպքում) և տվյալների միավորների կուտակային հաշվարկը:

Վերջնական քայլը վերապատրաստման և փորձարկման տվյալների հավաքածուների ստեղծումն է՝ օգտագործելով հաշվարկված պառակտման ինդեքսը: Այս գործողության համար մենք օգտագործում ենք ցուցակի կտրում:

Օրինակ

import numpy as np

data = np.array(range(1, 101))  
# data is a numpy array of integers from 1 to 100
np.random.shuffle(data)

split_ratio = 0.8  # We are using an 80-20 split here
split_index = int(split_ratio * len(data))

train_data = data[:split_index]
test_data = data[split_index:]

Արդյունք

train_data = [52, 13, 87, 68, 48, 4, 34, 9, 74, 25, 
30, 38, 90, 83, 54, 45, 61, 73, 80, 14, 70, 63, 75, 
81, 97, 60, 96, 8, 43, 20, 79, 46, 50, 76, 18, 84, 
26, 31, 71, 56, 22, 88, 64, 95, 91, 78, 69, 19, 42, 
67, 77, 2, 41, 32, 11, 94, 40, 59, 17, 57, 99, 44, 
5, 93, 62, 23, 3, 33, 47, 92]

test_data = [49, 66, 7, 58, 37, 98, 100, 24, 6, 55, 
28, 16, 85, 65, 51, 35, 12, 10, 86, 29]

Եզրակացություն

Տվյալների տարանջատումը ուսուցման և ստուգման հավաքածուների մեջ առաջնային քայլ է մեքենայական ուսուցման և տվյալների գիտության ձեռնարկություններում: Թեև sklearn-ը տրամադրում է այս առաջադրանքը կատարելու պարզ մեթոդ, կարևոր է հասկանալ, թե ինչպես հասնել դրան ձեռքով: Ինչպես մենք ցույց տվեցինք, դա կարող է իրականացվել Python-ի ներկառուցված գործողությունների կամ numpy գրադարանի միջոցով:

Անկախ նրանից, թե դուք նախընտրում եք օգտագործել sklearn-ը, Python-ի ներկառուցված գործողությունները կամ numpy-ը, կախված է ձեր հատուկ պահանջներից և սահմանափակումներից: Յուրաքանչյուր մեթոդ ունի իր առավելություններն ու թերությունները: Ձեռնարկի մեթոդները ձեզ ավելի շատ վերահսկողություն են տալիս գործընթացի վրա, մինչդեռ sklearn-ի train_test_split()-ն ավելի հեշտ է օգտագործել և ներառում է լրացուցիչ հատկանիշներ, ինչպիսիք են շերտավորումը: