两个相似的代码提供不同的答案

问题描述

我编写了两个代码来探索测试邮件并创建模型来预测邮件是否为垃圾邮件。

在两个 SVC 模型中,我都使用了 Tfidf Vectorizer 并设置了 max_df = 5 并添加了一个新列,即文档的长度。

这是第一段代码,它返回 ROC AUC 分数为 0.85

def spam_or_not():
    v = TfidfVectorizer(max_df=5).fit(X_train)
    l_train = [len(x) for x in X_train]
    l_test = [len(x) for x in X_test]
    x_train_text = v.transform(X_train) 
    x_train = add_feature(x_train_text,l_train) #add_features returns sparse feature matrix with added feature.
    x_test_text = v.transform(X_test)
    x_test = add_feature(x_test_text,l_test)
    clf = SVC(C=10000)
    clf.fit(x_train,y_train)
    y_predict = clf.predict(x_test)
    return roc_auc_score(y_test,y_predict)

这是第二个代码,得分为 0.95。

def spam_or_not():
    length_X_train = list(map(len,X_train))
    length_X_test = list(map(len,X_test))
    vect = TfidfVectorizer(min_df=5).fit(X_train)
    X_train_vectorized = vect.transform(X_train)
    X_test_vectorized = vect.transform(X_test)
    x_test_text = vect.transform(X_test)
    x_train = add_feature(X_train_vectorized,length_X_train)
    x_test = add_feature(X_test_vectorized,length_X_test)
    clf = SVC(C=10000)
    clf.fit(x_train,y_train)
    y_predict = clf.predict(x_test)
    score = roc_auc_score(y_test,y_predict)
    return roc_auc_score(y_test,y_predict) 

这两个代码在我看来是一样的,但仍然给出了非常不同的结果。如果有人可以告诉我这两者之间的区别,那将非常有帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)