【问题标题】:Newbie : How evaluate model to increase accuracy model in classification新手:如何评估模型以提高分类模型的准确性
【发布时间】:2021-08-26 01:18:45
【问题描述】:

我的数据

如果我的某些模型在运行时产生如下结果,我该如何提高模型的准确性 `

from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(criterion = 'entropy', random_state = 0)
classifier.fit(X_train, y_train)

# Predicting the Test set results
y_pred = classifier.predict(X_test)

# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

from sklearn import metrics
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
Accuracy: 0.6780893042575286

` 随机森林分类器:精度:0.6780893042575286

【问题讨论】:

    标签: python classification random-forest decision-tree


    【解决方案1】:

    有几种方法可以实现这一点:

    1. 查看数据。它们是否处于算法的最佳状态?关于NaN,协方差等?它们是否已标准化,分类的是否翻译得很好?对于论坛来说,这是一个影响深远的问题。

    2. 查看问题和适合该问题的不同算法。也许

    • 逻辑回归
    • SVN
    • XGBoost
    • ....
    1. 尝试使用 RandomisedsearvCV 或 GridSearchCV 调整超参数

    这是相当高级的。

    【讨论】:

      【解决方案2】:

      在模型选择方面,您可以使用如下函数来找到适合该问题的好模型。

      from sklearn.linear_model import LogisticRegression
      from sklearn.neighbors import KNeighborsClassifier
      from sklearn.svm import SVC
      from sklearn.ensemble import RandomForestClassifier
      from sklearn.naive_bayes import GaussianNB
      from xgboost import XGBClassifier
      from sklearn import model_selection
      from sklearn.utils import class_weight
      from sklearn.metrics import classification_report
      from sklearn.metrics import confusion_matrix
      
      
      def mutli_model(X_train, y_train, X_test, y_test):
      """ Function to determine best model archietecture """
      
          dfs = []
          models = [
                    ('LogReg', LogisticRegression()), 
                    ('RF', RandomForestClassifier()),
                    ('KNN', KNeighborsClassifier()),
                    ('SVM', SVC()), 
                    ('GNB', GaussianNB()),
                    ('XGB', XGBClassifier(eval_metric="error"))
                  ]
      
          results = []
          names = []
          scoring = ['accuracy', 'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc']
          target_names = ['App_Status_1', 'App_Status_2']
      
          for name, model in models:
                  kfold = model_selection.KFold(n_splits=5, shuffle=True, random_state=90210)
                  cv_results = model_selection.cross_validate(model, X_train, y_train, cv=kfold, scoring=scoring)
                  clf = model.fit(X_train, y_train)
                  y_pred = clf.predict(X_test)
                  print(name)
                  print(classification_report(y_test, y_pred, target_names=target_names))
                  results.append(cv_results)
                  names.append(name)
      
                  this_df = pd.DataFrame(cv_results)
                  this_df['model'] = name
                  dfs.append(this_df)
                  
          final = pd.concat(dfs, ignore_index=True)
          return final
      

      选择模型后,您可以执行名为Hyperparameter tuning 的操作,这将进一步提高模型的性能。

      如果您想进一步改进模型,您可以实施Data Augmentation 等技术,并重新审视数据的清理阶段。

      如果在这之后,如果仍然没有改善,您可以尝试收集更多数据或重新关注问题陈述。

      【讨论】:

        猜你喜欢
        • 2019-10-21
        • 2016-08-08
        • 2019-09-16
        • 2018-08-26
        • 2018-10-05
        • 2019-10-21
        • 2021-11-24
        • 1970-01-01
        • 2020-02-05
        相关资源
        最近更新 更多