PHP
मशीन लर्निंग
खोज…
टिप्पणियों
विषय सभी मशीन लर्निंग एल्गोरिदम के लिए PHP-ML का उपयोग करता है। पुस्तकालय की स्थापना का उपयोग करके किया जा सकता है
composer require php-ai/php-ml
उसी के लिए गितुब भंडार यहां पाया जा सकता है ।
यह भी ध्यान देने योग्य है कि दिए गए उदाहरण केवल प्रदर्शन के उद्देश्य से बहुत छोटे डेटा-सेट हैं। वास्तविक डेटा-सेट उससे अधिक व्यापक होना चाहिए।
PHP-ML का उपयोग करके वर्गीकरण
मशीन लर्निंग में वर्गीकरण वह समस्या है जो यह पहचानती है कि कौन सी श्रेणियों का सेट एक नया अवलोकन करता है। वर्गीकरण Supervised Machine Learning
की श्रेणी में आता है।
वर्गीकरण को लागू करने वाले किसी भी एल्गोरिथ्म को क्लासिफायरियर के रूप में जाना जाता है
PHP-ML में समर्थित क्लासिफायर हैं
- SVC (समर्थन वेक्टर वर्गीकरण)
- k- निकटतम पड़ोसी
- नाइव बेयस
train
और predict
मेथड सभी क्लासिफायर के लिए समान हैं। उपयोग किए गए अंतर्निहित एल्गोरिथम में एकमात्र अंतर होगा।
SVC (समर्थन वेक्टर वर्गीकरण)
इससे पहले कि हम एक नए अवलोकन की भविष्यवाणी करने के साथ शुरू कर सकें, हमें अपने क्लासिफायर को प्रशिक्षित करने की आवश्यकता है। निम्नलिखित कोड पर विचार करें
// Import library
use Phpml\Classification\SVC;
use Phpml\SupportVectorMachine\Kernel;
// Data for training classifier
$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]]; // Training samples
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];
// Initialize the classifier
$classifier = new SVC(Kernel::LINEAR, $cost = 1000);
// Train the classifier
$classifier->train($samples, $labels);
कोड बहुत सीधे आगे है। ऊपर उपयोग की गई $cost
बात का एक पैमाना है कि हम प्रत्येक प्रशिक्षण उदाहरण को मिसकॉल करने से कितना बचना चाहते हैं। $cost
के एक छोटे मूल्य के लिए आपको मिसाल दी जा सकती है। डिफ़ॉल्ट रूप से यह 1.0 पर सेट है
अब जब हमारे पास क्लासीफायर प्रशिक्षित है तो हम कुछ वास्तविक भविष्यवाणियां करना शुरू कर सकते हैं। भविष्यवाणियों के लिए हमारे पास निम्नलिखित कोडों पर विचार करें
$classifier->predict([3, 2]); // return 'b'
$classifier->predict([[3, 2], [1, 5]]); // return ['b', 'a']
उपरोक्त मामले में क्लासिफायरियर अवर्गीकृत नमूने ले सकता है और वहां लेबल की भविष्यवाणी कर सकता है। predict
विधि एकल नमूना के साथ-साथ नमूने की एक सरणी ले सकती है।
k- निकटतम पड़ोसी
इस एल्गोरिथ्म के लिए क्लासफियर को दो मापदंडों में लिया जाता है और इसे शुरू किया जा सकता है
$classifier = new KNearestNeighbors($neighbor_num=4);
$classifier = new KNearestNeighbors($neighbor_num=3, new Minkowski($lambda=4));
$neighbor_num
पड़ोसी_नम नज़दीकी एल्गोरिथ्म में स्कैन करने के लिए निकटतम पड़ोसियों की संख्या है, जबकि दूसरा पैरामीटर दूरी मीट्रिक है जो पहले मामले में डिफ़ॉल्ट रूप से Euclidean
होगा। Minkowski पर अधिक यहाँ पाया जा सकता है ।
इस क्लासिफायरफ़ायर का उपयोग करने के बारे में एक संक्षिप्त उदाहरण निम्नलिखित है
// Training data
$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];
// Initialize classifier
$classifier = new KNearestNeighbors();
// Train classifier
$classifier->train($samples, $labels);
// Make predictions
$classifier->predict([3, 2]); // return 'b'
$classifier->predict([[3, 2], [1, 5]]); // return ['b', 'a']
NaiveBayes क्लासिफायर
NaiveBayes Classifier
Bayes' theorem
पर आधारित Bayes' theorem
और निर्माण में किसी भी पैरामीटर की आवश्यकता नहीं है।
निम्नलिखित कोड एक सरल भविष्यवाणी कार्यान्वयन दर्शाता है
// Training data
$samples = [[5, 1, 1], [1, 5, 1], [1, 1, 5]];
$labels = ['a', 'b', 'c'];
// Initialize classifier
$classifier = new NaiveBayes();
// Train classifier
$classifier->train($samples, $labels);
// Make predictions
$classifier->predict([3, 1, 1]); // return 'a'
$classifier->predict([[3, 1, 1], [1, 4, 1]); // return ['a', 'b']
व्यावहारिक मामला
अब तक हमने केवल अपने सभी मामलों में पूर्णांक के सरणियों का उपयोग किया था, लेकिन वास्तविक जीवन में ऐसा नहीं है। इसलिए मुझे क्लासीफायर का उपयोग करने के बारे में एक व्यावहारिक स्थिति का वर्णन करने की कोशिश करें।
मान लीजिए कि आपके पास एक एप्लिकेशन है जो प्रकृति में फूलों की विशेषताओं को संग्रहीत करता है। सादगी के लिए हम पंखुड़ियों के रंग और लंबाई पर विचार कर सकते हैं। इसलिए हमारे डेटा को प्रशिक्षित करने के लिए दो विशेषताओं का उपयोग किया जाएगा।
color
सबसे सरल है जहां आप उनमें से प्रत्येक के लिए एक अंतर मान दे सकते हैं और लंबाई के लिए, आपके पास एक सीमा हो सकती है जैसे(0 mm,10 mm)=1 , (10 mm,20 mm)=2
। प्रारंभिक डेटा के साथ अपने क्लासिफ़ायर ट्रेन। अब आपके उपयोगकर्ता को अपने पिछवाड़े में उगने वाले फूल की पहचान करने की आवश्यकता है। वह जो करता है वह फूल केcolor
का चयन करता है और पंखुड़ियों की लंबाई जोड़ता है। आप चलने वाले क्लासिफायर फूल के प्रकार का पता लगा सकते हैं ("ऊपर उदाहरण में लेबल")
वापसी
PHP-ML
उपयोग से वर्गीकरण में हमने नए अवलोकन के लिए लेबल सौंपा। प्रतिगमन अंतर के साथ लगभग समान है कि आउटपुट मूल्य एक क्लास लेबल नहीं है, लेकिन एक निरंतर मूल्य है। यह व्यापक रूप से भविष्यवाणियों और पूर्वानुमान के लिए उपयोग किया जाता है। PHP-ML निम्नलिखित प्रतिगमन एल्गोरिदम का समर्थन करता है
- वेक्टर प्रतिगमन का समर्थन करें
- LeastSquares रैखिक प्रतिगमन
प्रतिगमन में एक ही train
और वर्गीकरण में उपयोग किए जाने वाले तरीकों की predict
करता है।
वेक्टर प्रतिगमन का समर्थन करें
यह एसवीएम (सपोर्ट वेक्टर मशीन) के लिए प्रतिगमन संस्करण है। वर्गीकरण में पहला कदम हमारे मॉडल को प्रशिक्षित करना है।
// Import library
use Phpml\Regression\SVR;
use Phpml\SupportVectorMachine\Kernel;
// Training data
$samples = [[60], [61], [62], [63], [65]];
$targets = [3.1, 3.6, 3.8, 4, 4.1];
// Initialize regression engine
$regression = new SVR(Kernel::LINEAR);
// Train regression engine
$regression->train($samples, $targets);
प्रतिगमन में $targets
वर्गीकरण के विपरीत वर्ग लेबल नहीं हैं। यह दोनों के लिए अलग-अलग कारकों में से एक है। हमारे मॉडल को डेटा के साथ प्रशिक्षित करने के बाद हम वास्तविक भविष्यवाणियों के साथ शुरू कर सकते हैं
$regression->predict([64]) // return 4.03
ध्यान दें कि भविष्यवाणियां लक्ष्य के बाहर एक मान लौटाती हैं।
LeastSquares रैखिक प्रतिगमन
यह एल्गोरिथ्म अनुमानित समाधान के लिए least squares method
का उपयोग करता है। निम्नलिखित प्रशिक्षण और भविष्यवाणी का एक सरल कोड प्रदर्शित करता है
// Training data
$samples = [[60], [61], [62], [63], [65]];
$targets = [3.1, 3.6, 3.8, 4, 4.1];
// Initialize regression engine
$regression = new LeastSquares();
// Train engine
$regression->train($samples, $targets);
// Predict using trained engine
$regression->predict([64]); // return 4.06
PHP-ML Multiple Linear Regression
का विकल्प भी प्रदान करता है। उसी के लिए एक नमूना कोड निम्नानुसार हो सकता है
$samples = [[73676, 1996], [77006, 1998], [10565, 2000], [146088, 1995], [15000, 2001], [65940, 2000], [9300, 2000], [93739, 1996], [153260, 1994], [17764, 2002], [57000, 1998], [15000, 2000]];
$targets = [2000, 2750, 15500, 960, 4400, 8800, 7100, 2550, 1025, 5900, 4600, 4400];
$regression = new LeastSquares();
$regression->train($samples, $targets);
$regression->predict([60000, 1996]) // return 4094.82
Multiple Linear Regression
विशेष रूप से तब उपयोगी होता है जब कई कारक या लक्षण परिणाम की पहचान करते हैं।
व्यावहारिक मामला
अब हम वास्तविक जीवन परिदृश्य में प्रतिगमन का एक आवेदन लेते हैं।
माना कि आप बहुत लोकप्रिय वेबसाइट चलाते हैं, लेकिन ट्रैफ़िक बदलता रहता है। आप एक ऐसा समाधान चाहते हैं जो उन सर्वरों की संख्या का अनुमान लगाता है जिन्हें आपको किसी भी समय पर तैनात करने की आवश्यकता होती है। चलो यह मानते हैं कि आपका होस्टिंग प्रदाता आपको सर्वर बाहर करने के लिए एक एपीआई देता है और प्रत्येक सर्वर को बूट होने में 15 मिनट लगते हैं। ट्रैफ़िक, और प्रतिगमन के पिछले डेटा के आधार पर आप उस ट्रैफ़िक का अनुमान लगा सकते हैं जो आपके एप्लिकेशन को किसी भी समय हिट करेगा। उस ज्ञान का उपयोग करके आप सर्ज से 15 मिनट पहले सर्वर शुरू कर सकते हैं जिससे आपका एप्लिकेशन ऑफलाइन होने से बच जाएगा।
क्लस्टरिंग
क्लस्टरिंग समान वस्तुओं को एक साथ समूहीकृत करने के बारे में है। यह पैटर्न मान्यता के लिए व्यापक रूप से उपयोग किया जाता है। Clustering
unsupervised machine learning
अंतर्गत आता है, इसलिए किसी प्रशिक्षण की आवश्यकता नहीं है। PHP-ML में निम्नलिखित क्लस्टरिंग एल्गोरिदम के लिए समर्थन है
- k-मीन्स
- dbscan
k-मीन्स
k-Means डेटा को समान भिन्नता के n
समूहों में अलग करता है। इसका मतलब यह है कि हमें एक संख्या n
में पास होने की आवश्यकता है जो हमारे समाधान में आवश्यक क्लस्टर की संख्या होगी। निम्नलिखित कोड अधिक स्पष्टता लाने में मदद करेगा
// Our data set
$samples = [[1, 1], [8, 7], [1, 2], [7, 8], [2, 1], [8, 9]];
// Initialize clustering with parameter `n`
$kmeans = new KMeans(3);
$kmeans->cluster($samples); // return [0=>[[7, 8]], 1=>[[8, 7]], 2=>[[1,1]]]
ध्यान दें कि आउटपुट में 3 सरणियाँ होती हैं क्योंकि क्योंकि KMeans
कंस्ट्रक्टर में n
का KMeans
था। कंस्ट्रक्टर में एक वैकल्पिक दूसरा पैरामीटर भी हो सकता है जो initialization method
। उदाहरण के लिए विचार करें
$kmeans = new KMeans(4, KMeans::INIT_RANDOM);
समूहों को निर्धारित करने की कोशिश करते हुए INIT_RANDOM
पूरी तरह से यादृच्छिक सेंट्रोइड रखता है। लेकिन सिर्फ सेंट्रोइड को डेटा से बहुत दूर होने से बचाने के लिए, यह डेटा की अंतरिक्ष सीमाओं से बंधा है।
डिफ़ॉल्ट कंस्ट्रक्टर initialization method
kmeans ++ है जो प्रक्रिया को तेज करने के लिए स्मार्ट तरीके से सेंट्रोइड का चयन करता है।
DBSCAN
KMeans
विपरीत, DBSCAN
एक घनत्व आधारित क्लस्टरिंग एल्गोरिथ्म है जिसका अर्थ है कि हम n
पास नहीं करेंगे जो कि हमारे परिणाम में KMeans
समूहों की संख्या निर्धारित करेगा। दूसरी ओर इसके लिए दो मापदंडों की आवश्यकता होती है
- $ minSamples: ऑब्जेक्ट्स की न्यूनतम संख्या जो एक क्लस्टर में मौजूद होनी चाहिए
- $ एप्सिलॉन: जो एक ही क्लस्टर में माना जाने वाला दो नमूनों के बीच की अधिकतम दूरी है।
उसी के लिए एक त्वरित नमूना निम्नानुसार है
// Our sample data set
$samples = [[1, 1], [8, 7], [1, 2], [7, 8], [2, 1], [8, 9]];
$dbscan = new DBSCAN($epsilon = 2, $minSamples = 3);
$dbscan->cluster($samples); // return [0=>[[1, 1]], 1=>[[8, 7]]]
कोड बहुत ज्यादा आत्म व्याख्यात्मक है। एक बड़ा अंतर यह है कि केमन्स के विपरीत आउटपुट सरणी में तत्वों की संख्या जानने का कोई तरीका नहीं है।
प्रैक्टिकल केस
अब हम वास्तविक जीवन परिदृश्य में क्लस्टरिंग का उपयोग करने पर एक नज़र डालते हैं
क्लस्टरिंग व्यापक रूप से
pattern recognition
औरdata mining
में उपयोग किया जाता है। विचार करें कि आपके पास एक सामग्री प्रकाशन अनुप्रयोग है। अब अपने उपयोगकर्ताओं को बनाए रखने के लिए उन्हें उस सामग्री को देखना चाहिए जो उन्हें पसंद है। आइए हम सरलता के लिए यह मान लें कि यदि वे किसी विशिष्ट वेबपृष्ठ पर अधिक मिनट के लिए हैं और वे नीचे की ओर खिसकते हैं तो वे उस सामग्री को पसंद करते हैं। अब आपकी प्रत्येक सामग्री इसके साथ एक विशिष्ट पहचानकर्ता होगी और ऐसा ही उपयोगकर्ता होगा। इसके आधार पर क्लस्टर बनाएं और आपको पता चल जाएगा कि उपयोगकर्ताओं के किस सेगमेंट में समान सामग्री का स्वाद है। यह बदले में सिफारिश प्रणाली में इस्तेमाल किया जा सकता है जहां आप यह मान सकते हैं कि यदि एक ही क्लस्टर के कुछ उपयोगकर्ता लेख से प्यार करते हैं तो अन्य लोग भी करेंगे और इसे आपके आवेदन पर सिफारिशों के रूप में दिखाया जा सकता है।