Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用TfidVectorier时出现奇怪的线条,可能是由于替换为'';?_Python_Scikit Learn_Linear Regression_Data Science - Fatal编程技术网

Python 使用TfidVectorier时出现奇怪的线条,可能是由于替换为'';?

Python 使用TfidVectorier时出现奇怪的线条,可能是由于替换为'';?,python,scikit-learn,linear-regression,data-science,Python,Scikit Learn,Linear Regression,Data Science,我昨天在这里发布了一个预测情绪的文本线性回归模型,我想知道的是,在将文本小写、删除所有停止字/标点符号和数字后,我的一些文本功能上留下了奇怪的线条 ['_______', '__________', '__________ pros', '____________', '____________ pros', '_____________', '_____________ pros', 'aa', 'aa waist', 'ab', 'abdomen', 'ab

我昨天在这里发布了一个预测情绪的文本线性回归模型,我想知道的是,在将文本小写、删除所有停止字/标点符号和数字后,我的一些文本功能上留下了奇怪的线条

     ['_______',


'__________',
 '__________ pros',
 '____________',
 '____________ pros',
 '_____________',
 '_____________ pros',
 'aa',
 'aa waist',
 'ab',
 'abdomen',
 'ability',
 'able',
 'able button',
 'able buy',
我想是因为我把标点符号和数字换成了空格?我还是不能完全肯定

另一个问题是,我如何为线性回归正确地构造它?我是否应该用一列句子的特征来表示每个句子,并将其输入网络?但是如果矩阵是稀疏的,我该如何处理呢

抱歉,刚刚了解了更多关于文本预处理的信息

以下是我的清洁步骤:让我们假设一句话是这样的:“这件可爱的铂金连衣裙是女性化的,非常合身,易于穿着,也很舒适!强烈推荐

  • 小写的

    所有句子['句子]]=所有句子['句子]].map(lambda x:x.lower())

  • 2.删除停止词

      stop = stopwords.words('english')
        AllSentences['Sentences_without_stopwords'] = AllSentences['Sentence'].apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))
    
    3.删除数字

    AllSentences['Sentences_without_stopwords_punc'] = AllSentences['Sentences_without_stopwords'].apply(lambda x: re.sub(r'[^\w\s]', '',x))
    AllSentences['Sentences_without_stopwords_punc'] = AllSentences['Sentences_without_stopwords_punc'].apply(lambda x: re.sub(r'\d+', '',x))
    
  • 测试/列车拆分,tfidvectorise

    X_train, X_test, y_train, y_test = train_test_split(X, Y, 
     test_size=0.30, random_state=42)
    
       vect_word = TfidfVectorizer(max_features=20000, lowercase=True, 
       analyzer='word',stop_words= 'english',ngram_range=(1,3),dtype=np.float32)
    
    tr_vect = vect_word.fit_transform(X_train)
    ts_vect = vect_word.transform(X_test)
    

  • 这为我提供了功能名称的上述输出?

    我认为使用
    TfidfVectorizer
    是初步尝试情绪分析的一个很好的起点。为了避免特征向量中的稀疏性,您可能希望从较少的特征开始,然后根据模型的执行情况逐步增加。您可以在训练时将其设置为超参数,并使用
    GridSearch
    管道
    为其找到最佳值。请看一个例子。根据具体情况,可能会使用更健壮的实现。然而,这很可能会给您的模型带来更大的复杂性

    字符串中的奇怪行是源文本中必须包含的下划线字符。在清理过程中没有清理它们,因为您使用了
    re.sub(r'[^\w\s]','',x)
    从字符串中删除非单词字符和非空白。下划线是单词字符集(
    '\w'
    )的一部分,因此未清除它们

    我还应该指出,您的大多数自定义清洁都不需要,因为
    TfidfVectorizer
    应该能够为您处理此问题。例如,删除停止字,然后
    TfidfVectorizer
    也尝试删除它们。从字符串中删除标点符号和数字也是如此
    TfidfVectorizer
    接受一个
    token
    参数,您可以向它传递一个正则表达式,以选择要保留在标记中的字符。如果您只希望字符串中包含字母字符,那么令牌参数的这个正则表达式应该足以为您处理清理:
    '[a-zA-Z]'
    。同样,我在这里不使用
    '\w'
    字符集,因为它包含下划线(和数字)


    由于您已经在列车组上运行了
    TfidfVectorizer
    fit_transform
    方法,并且在测试组上运行了
    transform
    方法,因此这些组中的样本应准备好进行培训/测试。它们不需要进一步处理。

    您可以分享一下清理字符串的方法吗?还有,你在提取哪些特征?@JamesMchugh我已经在文本中添加了上述步骤,我正在尝试提取可能代表好或坏情绪的特征。你是使用线性回归还是逻辑回归?对于情绪分析,分类器就足够了。我可能不正确,但我没有看到线性回归模型在这里的应用。