У меня есть набор данных из 4 столбцов: «идентификатор», «ключевые слова», «возраст» и «пол». Цель моего проекта - определить возраст и пол человека на основе его текста. Мои ключевые слова: например, в следующем формате: fiber: 16; quoi: 1; опасности: 1; combien: 1; hightech: 1 Где слово перед: ключевое слово, а число - сколько раз оно упоминалось в тексте. I ' мы удалили id и выполнили некоторую предварительную обработку для удаления пропущенных значений, и т. д. c., но я ищу способ выполнить классификатор случайного леса или svm на модели, но не могу сделать это после разделения на тренировку и тестирование. Я уверен, что поступаю неправильно, но я собираюсь сделать некоторую сумку обработки слов или кодирования меток, чтобы создать столбец, в котором каждому ключевому слову присваивается номер, и другой столбец, сколько раз упомянуто это слово. Однако таким образом у меня будет более 7 миллионов столбцов, учитывая, что мой набор данных состоит из 7,6 м строк. Я приложил свой (довольно плохой) код ниже, может кто-нибудь мне помочь Правильное направление, пожалуйста?
import pandas as pd
import numpy as np
train=pd.read_csv(r"C:\train.csv", encoding='utf8')
train.head()
len(train)
7265055
train.isnull().sum()
ID 0
keywords 846396
age 0
sex 0
dtype: int64
train=train.dropna()
len(train)
6418659
train.drop(['ID'],axis = 1,inplace = True)
train.head()
keywords age sex
0 fibre:16;quoi:1;dangers:1;combien:1;hightech:1... 62 F
1 restaurant:1;marrakech.shtml:1 35 M
2 payer:1;faq:1;taxe:1;habitation:1;macron:1;qui... 45 F
3 rigaud:3;laurent:3;photo:11;profile:8;photopro... 46 F
4 societe:1;disparition:1;proche:1;m%c3%a9lanie.... 42 F
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
X_train,X_test, y_train, y_test=train_test_split(train["keywords"],train["sex"],test_size=0.2, random_state=42)
X_train.head()
4073238 detail_offre:11;editorial:1;candidature:1;accu...
1160322 classement:1;financial:1;article:1;les:1;effon...
6784749 002sbnv1fmder07:1
4549060 forum:1;sabia:1;josette:1;affich:1;goacolou:1;...
3636612 scan:2;politique:3;citations:1;apres:1;france:...
Name: keywords, dtype: object
reg=RandomForestClassifier (max_depth=50, random_state=0, min_samples_leaf=3,min_samples_split=5)
reg.fit(X_train, y_train)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-107-35dbd23650e6> in <module>
----> 1 reg.fit(X_train, y_train)
~\Anaconda3\lib\site-packages\sklearn\ensemble\_forest.py in fit(self, X, y, sample_weight)
293 """
294 # Validate or convert input data
--> 295 X = check_array(X, accept_sparse="csc", dtype=DTYPE)
296 y = check_array(y, accept_sparse='csc', ensure_2d=False, dtype=None)
297 if sample_weight is not None:
~\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\numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
~\Anaconda3\lib\site-packages\pandas\core\series.py in __array__(self, dtype)
946 warnings.warn(msg, FutureWarning, stacklevel=3)
947 dtype = "M8[ns]"
--> 948 return np.asarray(self.array, dtype)
949
950 # ----------------------------------------------------------------------
~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
~\Anaconda3\lib\site-packages\pandas\core\arrays\numpy_.py in __array__(self, dtype)
164
165 def __array__(self, dtype=None):
--> 166 return np.asarray(self._ndarray, dtype=dtype)
167
168 _HANDLED_TYPES = (np.ndarray, numbers.Number)
~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
ValueError: could not convert string to float: 'detail_offre:11;editorial:1;candidature:1;accueil_candidatures:4;leadership:1;comment:1;ils:1;emploi:44;embauche:1;votre:1;recherche_offres:7;liste_offres:22;conseils:1;les:1;perso:4;article:1;recruteurs:1;entretien:1;detail:1;evaluent:1'
#CountVectorizer Attempt
from sklearn.feature_extraction.text import CountVectorizer
vect=CountVectorizer()
vect.fit(train)
CountVectorizer(analyzer='word', binary=False, decode_error='strict',
dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
lowercase=True, max_df=1.0, max_features=None, min_df=1,
ngram_range=(1, 1), preprocessor=None, stop_words=None,
strip_accents=None, token_pattern='(?u)\\b\\w\\w+\\b',
tokenizer=None, vocabulary=None)
print(vect.get_feature_names()[0:10])
print(vect.get_feature_names()[-10:])
['age', 'keywords', 'sex']
['age', 'keywords', 'sex']
def review_messages(msg):
# converting messages to lowercase
msg = msg.lower()
return msg
from nltk import stem
from nltk.corpus import stopwords
stemmer = stem.SnowballStemmer('french')
stopwords = set(stopwords.words('french'))
def alternative_review_messages(msg):
# converting messages to lowercase
msg = msg.lower()
# removing stopwords
msg = [word for word in msg.split() if word not in stopwords]
# using a stemmer
msg = " ".join([stemmer.stem(word) for word in msg])
return msg
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(train['keywords'], train['age'], test_size = 0.2, random_state = 1)
# training the vectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
train=vectorizer.fit_transform(train)
def pred(msg):
msg = vectorizer.transform([msg])
prediction = svm.predict(msg)
return prediction[0]
from sklearn import svm
svm = svm.SVC(C=1000)
svm.fit(X_train, y_train)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-94-118187edaf25> in <module>
1 from sklearn import svm
2 svm = svm.SVC(C=1000)
----> 3 svm.fit(X_train, y_train)
~\Anaconda3\lib\site-packages\sklearn\svm\_base.py in fit(self, X, y, sample_weight)
146 X, y = check_X_y(X, y, dtype=np.float64,
147 order='C', accept_sparse='csr',
--> 148 accept_large_sparse=False)
149 y = self._validate_targets(y)
150
~\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\numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
~\Anaconda3\lib\site-packages\pandas\core\series.py in __array__(self, dtype)
946 warnings.warn(msg, FutureWarning, stacklevel=3)
947 dtype = "M8[ns]"
--> 948 return np.asarray(self.array, dtype)
949
950 # ----------------------------------------------------------------------
~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
~\Anaconda3\lib\site-packages\pandas\core\arrays\numpy_.py in __array__(self, dtype)
164
165 def __array__(self, dtype=None):
--> 166 return np.asarray(self._ndarray, dtype=dtype)
167
168 _HANDLED_TYPES = (np.ndarray, numbers.Number)
~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
536
537 """
--> 538 return array(a, dtype, copy=False, order=order)
539
540
ValueError: could not convert string to float: 'psychologie:1;horoscope:1;lion:1;jour:1;zodiaque:1'
pred("detail_offre:11;editorial:1;candidature:1")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-93-4eeeec4fba8f> in <module>
----> 1 pred("detail_offre:11;editorial:1;candidature:1")
<ipython-input-92-f05e7c4d2a17> in pred(msg)
1 def pred(msg):
2 msg = vectorizer.transform([msg])
----> 3 prediction = svm.predict(msg)
4 return prediction[0]
NameError: name 'svm' is not defined