apache spark - स्पार्क-एमएल के साथ विशिष्ट सुविधाओं को कैसे संभालें?




apache-spark categorical-data (3)

आप एक स्ट्रर्क कॉलम प्रकार को स्पार्क डेटा फ्रेम में कास्ट फ़ंक्शन का उपयोग करके संख्यात्मक डेटा प्रकार पर डाल सकते हैं।

from pyspark.sql import SQLContext
from pyspark.sql.types import DoubleType, IntegerType

sqlContext = SQLContext(sc)
dataset = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('./data/titanic.csv')   

dataset = dataset.withColumn("Age", dataset["Age"].cast(DoubleType()))
dataset = dataset.withColumn("Survived", dataset["Survived"].cast(IntegerType()))

उपर्युक्त उदाहरण में, हम एक डेटा फ्रेम के रूप में एक सीएसवी फ़ाइल में पढ़ते हैं, डिफ़ॉल्ट स्ट्रिंग डेटाटाइप को पूर्णांक और डबल में डालें, और मूल डेटा फ्रेम को ओवरराइट करें। इसके बाद हम एक वेक्टर में सुविधाओं को मर्ज करने के लिए वेक्टर एस्सेबलर का उपयोग कर सकते हैं और अपने पसंदीदा स्पार्क एमएल एल्गोरिदम लागू कर सकते हैं।

मैं spark-ml साथ स्पष्ट डेटा कैसे संभाल सकता हूं और spark-mllib ?

सोचा कि दस्तावेज़ीकरण बहुत स्पष्ट नहीं है, ऐसा लगता है कि क्लासिफायर जैसे RandomForestClassifier , LogisticRegression RandomForestClassifier , में एक featuresCol हैं, जो तर्क है, जो DataFrame में सुविधाओं के कॉलम का नाम निर्दिष्ट करता है, और labelCol तर्क, जो लेबल वाले वर्गों के कॉलम का नाम निर्दिष्ट करता है DataFrame

जाहिर है, मैं अपनी भविष्यवाणी में एक से अधिक फीचर का उपयोग करना चाहता हूं, इसलिए मैंने वेक्टर VectorAssembler का उपयोग करने की कोशिश की ताकि मेरी सभी सुविधाओं को एक ही वेक्टर में featuresCol तहत रखा जा सके।

हालांकि, VectorAssembler केवल संख्यात्मक प्रकार, बूलियन प्रकार, और वेक्टर प्रकार (स्पार्क वेबसाइट के अनुसार) स्वीकार करता है, इसलिए मैं अपनी सुविधाओं वेक्टर में स्ट्रिंग नहीं डाल सकता।

मुझे कैसे आगे बढ़ना चाहिए?


मैं एक और परिप्रेक्ष्य से एक उत्तर प्रदान करने जा रहा हूं, क्योंकि मैं स्पार्क एमएल (एमएलआईबी नहीं) में पेड़-आधारित मॉडल के संबंध में स्पष्ट विशेषताओं के बारे में भी सोच रहा था, और दस्तावेज यह स्पष्ट नहीं है कि सब कुछ कैसे काम करता है।

जब आप pyspark.ml.feature.StringIndexer का उपयोग करके अपने pyspark.ml.feature.StringIndexer में कॉलम को pyspark.ml.feature.StringIndexer अतिरिक्त मेटा-डेटा pyspark.ml.feature.StringIndexer में संग्रहीत हो जाता है जो विशेष रूप से परिवर्तित विशेषता को एक विशिष्ट विशेषता के रूप में चिह्नित करता है।

जब आप डेटाफ्रेम प्रिंट करते हैं तो आपको एक संख्यात्मक मान दिखाई देगा (जो एक सूचकांक है जो आपके स्पष्ट मूल्यों में से एक के अनुरूप है) और यदि आप स्कीमा को देखते हैं तो आप देखेंगे कि आपका नया रूपांतरित कॉलम double प्रकार का है। हालांकि, यह नया कॉलम जिसे आपने pyspark.ml.feature.StringIndexer.transform के साथ बनाया है, केवल एक सामान्य डबल कॉलम नहीं है, इसमें इसके अतिरिक्त मेटा-डेटा है जो बहुत महत्वपूर्ण है। आप अपने डेटाफ्रेम की स्कीमा में उपयुक्त फ़ील्ड की metadata प्रॉपर्टी को देखकर इस मेटा-डेटा का निरीक्षण कर सकते हैं (आप yourdataframe.schema को देख कर अपने डेटाफ्रेम की स्कीमा ऑब्जेक्ट्स तक पहुंच सकते हैं)

इस अतिरिक्त मेटाडाटा में दो महत्वपूर्ण प्रभाव हैं:

  1. जब आप पेड़ आधारित मॉडल का उपयोग करते समय .fit() कॉल करते हैं, तो यह आपके डेटाफ्रेम के मेटा-डेटा को स्कैन करेगा और उन फ़ील्ड को पहचान देगा जिन्हें आपने ट्रांसफॉर्मर के साथ वर्गीकृत किया है जैसे कि pyspark.ml.feature.StringIndexer (जैसा ऊपर बताया गया है अन्य ट्रांसफार्मर जिनके पास यह प्रभाव भी होगा जैसे pyspark.ml.feature.VectorIndexer )। इस वजह से, स्पार्क एमएल में पेड़-आधारित मॉडल का उपयोग करते समय आपको स्ट्रिंग इंडेक्सर के साथ बदलने के बाद आपको अपनी सुविधाओं को एक-गर्म एन्कोड करने की आवश्यकता नहीं है (हालांकि, आपको अभी भी अन्य मॉडलों का उपयोग करते समय एक-गर्म एन्कोडिंग करना होगा स्वाभाविक रूप से रैखिक प्रतिगमन, आदि जैसे वर्गीकरण संभालते हैं)।

  2. चूंकि यह मेटाडेटा डेटा फ्रेम में संग्रहीत होता है, इसलिए आप किसी भी समय मूल स्पष्ट मानों (जो अक्सर तार होते हैं) पर संख्यात्मक सूचकांक को वापस करने के लिए pyspark.ml.feature.IndexToString का उपयोग कर सकते हैं।


स्ट्रिंगइंडेक्सर नामक एमएल पाइपलाइन का एक घटक है जिसका उपयोग आप अपने तारों को उचित तरीके से डबल में बदलने के लिए कर सकते हैं। http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.ml.feature.StringIndexer में अधिक दस्तावेज़ हैं, और http://spark.apache.org/docs/latest/ml-guide.html दिखाता है कि पाइपलाइनों का निर्माण कैसे करें।





apache-spark-mllib