Meezo ML نشر 14 يونيو 2021 أرسل تقرير نشر 14 يونيو 2021 أعمل على مجموعة بيانات "داتاسيت" هي تغريدات تويتر، لذا قمت مبدأياً ببناء نموذج LogisticRegrission لكن لاأعلم سبب الخطأ التالي: <class 'pandas.core.series.Series'> --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-9-20b55637dec5> in <module> 10 print(type(X_train)) 11 clf = LogisticRegression() ---> 12 clf.fit(X_train, y_train) ~\anaconda3\lib\site-packages\sklearn\linear_model\_logistic.py in fit(self, X, y, sample_weight) 1525 1526 X, y = check_X_y(X, y, accept_sparse='csr', dtype=_dtype, order="C", -> 1527 accept_large_sparse=solver != 'liblinear') 1528 check_classification_targets(y) 1529 self.classes_ = np.unique(y) ~\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator) 753 ensure_min_features=ensure_min_features, 754 warn_on_dtype=warn_on_dtype, --> 755 estimator=estimator) 756 if multi_output: 757 y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False, ~\anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 529 array = array.astype(dtype, casting="unsafe", copy=False) 530 else: --> 531 array = np.asarray(array, order=order, dtype=dtype) 532 except ComplexWarning: 533 raise ValueError("Complex data not supported\n" ~\anaconda3\lib\site-packages\numpy\core\_asarray.py in asarray(a, dtype, order) 81 82 """ ---> 83 return array(a, dtype, copy=False, order=order) 84 85 ~\anaconda3\lib\site-packages\pandas\core\series.py in __array__(self, dtype) 752 dtype='datetime64[ns]') 753 """ --> 754 return np.asarray(self.array, dtype) 755 756 # ---------------------------------------------------------------------- ~\anaconda3\lib\site-packages\numpy\core\_asarray.py in asarray(a, dtype, order) 81 82 """ ---> 83 return array(a, dtype, copy=False, order=order) 84 85 ~\anaconda3\lib\site-packages\pandas\core\arrays\numpy_.py in __array__(self, dtype) 182 183 def __array__(self, dtype=None) -> np.ndarray: --> 184 return np.asarray(self._ndarray, dtype=dtype) 185 186 _HANDLED_TYPES = (np.ndarray, numbers.Number) ~\anaconda3\lib\site-packages\numpy\core\_asarray.py in asarray(a, dtype, order) 81 82 """ ---> 83 return array(a, dtype, copy=False, order=order) 84 85 ValueError: could not convert string to float: 'قزم العهد' الكود: from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split import pandas as pd Data = pd.read_csv('D:/train.csv') Data['Tweet'] =Data['Tweet'].astype(str) data["Class"].replace({"abusive":0,"hate":0,"normal":1},inplace=True) data = Data['Tweet'] label = Data["Class"] X_train, X_test, y_train, y_test = train_test_split(data, label, test_size = 0.2, random_state = 2021) clf = LogisticRegression() clf.fit(X_train, y_train) اقتباس
0 Ali Haidar Ahmad نشر 14 يونيو 2021 أرسل تقرير نشر 14 يونيو 2021 سبب الخطأ أنك لم تقم بتحويل البيانات إلى صيغة رقمية، فالتابع fit يتوقع منك قيم float وليس String لذا يجب أن تقوم بتحويل النص إلى صيغة رقمية أي يجب أن تقوم بخطوة Text Represintaion. المثال التالي سأعرض لك فيه كيف سأقوم بالأمر عن طريق تمثيل النص باستخدام ترميز TF-IDF: from sklearn.linear_model import LogisticRegression from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.pipeline import make_pipeline from sklearn.metrics import confusion_matrix,accuracy_score, classification_report Data = pd.read_csv('D:/train.csv') Data['Tweet'] =Data['Tweet'].astype(str) Data['Class'].replace({"abusive":0,"hate":0,"normal":1},inplace=True) data = Data['Tweet'] label = Data["Class"] X_train, X_test, Y_train, Y_test = train_test_split(data, label, test_size = 0.2, random_state = 2021) pipe = make_pipeline(TfidfVectorizer(),LogisticRegression()) pipe.fit(X_train,Y_train) prediction = pipe.predict(X_test) print(f"Accuracy score is {accuracy_score(prediction, Y_test):.2f}") print(classification_report(prediction, Y_test)) 1 اقتباس
0 ريم المهدي نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 البيانات النصية في بايثون تتم معالجتها قبل تمريرها لأي نموذج تدريبي، منها تحويل النص ألى كلمات و تسمي word tokenization و من ثم تحويل الكلمات إلى أرقام صحيحة او كسرية وهذه العملية تسمي feature extraction أو vectorization. هنالك 3 طرق للقيام بعملية تحويل الكلمات لأرقام، إحداها قام بشرحها @Ali Haidar Ahmadوهي تقوم بإعطاء كل كلمة قيمة رقمية score بناء أهميتها ومع الأخذ في لاعتبار عدد مرات ظهورها. سأقوم بشرح طريقتين أخرتين لتحويل الكلمات إلى قيم رقمية. الأولي: Count Vectorizer وهي من أسهل الطرق وذلك لأنها تقسم الملف النصي لمجموعة كلمات، وبه دالة fit_transform تقوم بتحديد الكلمات الموجودة في الملف النصي و عدد مرات ظهورها. في هذه الحالة يمكننا التطبيق على المثال اعلاه كالتالي: from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() X = vectorizer.fit_transform(Data['Tweet']) بهذا تكون X عبارة عن 2D array الصفوف تمثل عدد الجمل او التويتات، و الأعمدة تمثل عدد الكلمات، مقابل كل كلمة موجودة في الجملة يوجد رقم 1 و 0 في حالة عدم وجودها، يمكنك التحقق بتحويل X الي مصفوفة عن طريق دالة ()X.toarray. و طبعاً في هذه الحالة يمكنك إستنتاج أن طريقة TfidfVectorizer أفضل من التعداد، لكن هل تنفع الطريقتين في حال وجود بيانات نصية كبيرة جداً، للإجابة على هذا السؤال يوجد طريقة أفضل و هي HashingVectorizer و التي تقوم بالمهمة في حال البيانات الضخمة بدون إستهلاك للذاكرة أو بطء ف عملية التحويل. طريقة HashingVectorizer تقوم بعملية تحويل النصوص إلى أرقام بإستخدام طريقة تطبيع عدد مرات ظهور الكلمة normalized token occurrences و بتطبيق عملية ترميز hashing محددة تتحول الكلمات إلى أرقام، بذلك يصبح من السهل تحويل النصوص الضخمة إلى أرقام لتسهل عملية تدريب النموذج و التنبؤ فيما بعد. راجع المثال التالي لتتعرف على كيفية التطبيق على بياناتك: from sklearn.feature_extraction.text import HashingVectorizer vectorizer = HashingVectorizer(n_features=100) X = vectorizer.transform(Data['Tweet']) لاحظ للمتغير n_feature وهو عبارة عن عدد الأعمدة الثابتة لكل التويتات في Data['Tweet'] وهي تمثل ال hash functions، القيم الناتجة من تحويل X إلى مصفوفة و طبعاتها تكون محصورة بين 1و -1 و التي يمكن تحويلها لأرقام صحيحة بتغيير القيم الإبتدائية للدالة HashingVectorizer. اقتباس
السؤال
Meezo ML
أعمل على مجموعة بيانات "داتاسيت" هي تغريدات تويتر، لذا قمت مبدأياً ببناء نموذج LogisticRegrission لكن لاأعلم سبب الخطأ التالي:
الكود:
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split import pandas as pd Data = pd.read_csv('D:/train.csv') Data['Tweet'] =Data['Tweet'].astype(str) data["Class"].replace({"abusive":0,"hate":0,"normal":1},inplace=True) data = Data['Tweet'] label = Data["Class"] X_train, X_test, y_train, y_test = train_test_split(data, label, test_size = 0.2, random_state = 2021) clf = LogisticRegression() clf.fit(X_train, y_train)
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.