【问题标题】:increase accuracy of model in sklearn提高sklearn中模型的准确性
【发布时间】:2018-05-21 02:43:57
【问题描述】:

决策树分类的准确度为 0.52,但我想提高准确度。如何使用 sklearn 中可用的任何分类模型来提高准确性。

我使用过 knn、决策树和交叉验证,但它们的准确性都较低。

谢谢

import pandas as pd
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier

#read from the csv file and return a Pandas DataFrame.
nba = pd.read_csv('wine.csv')

# print the column names
original_headers = list(nba.columns.values)
print(original_headers)

#print the first three rows.
print(nba[0:3])

# "Position (pos)" is the class attribute we are predicting. 
class_column = 'quality'

#The dataset contains attributes such as player name and team name. 
#We know that they are not useful for classification and thus do not 
#include them as features. 
feature_columns = ['fixed acidity', 'volatile acidity', 'citric     acid', 'residual sugar', 'chlorides', 'free sulfur dioxide', 'total sulfur         dioxide', 'density', 'pH','sulphates', 'alcohol']

#Pandas DataFrame allows you to select columns. 
#We use column selection to split the data into features and class. 
nba_feature = nba[feature_columns]
nba_class = nba[class_column]

print(nba_feature[0:3])
print(list(nba_class[0:3]))

train_feature, test_feature, train_class, test_class = \
train_test_split(nba_feature, nba_class, stratify=nba_class, \
train_size=0.75, test_size=0.25)

training_accuracy = []
test_accuracy = []

knn = KNeighborsClassifier(n_neighbors=5, metric='minkowski', p=1)
knn.fit(train_feature, train_class)
prediction = knn.predict(test_feature)
print("Test set predictions:\n{}".format(prediction))
print("Test set accuracy: {:.2f}".format(knn.score(test_feature, test_class)))

train_class_df = pd.DataFrame(train_class,columns=[class_column])     
train_data_df = pd.merge(train_class_df, train_feature, left_index=True, right_index=True)
train_data_df.to_csv('train_data.csv', index=False)

temp_df = pd.DataFrame(test_class,columns=[class_column])
temp_df['Predicted Pos']=pd.Series(prediction, index=temp_df.index)
test_data_df = pd.merge(temp_df, test_feature, left_index=True, right_index=True)
test_data_df.to_csv('test_data.csv', index=False)

tree = DecisionTreeClassifier(max_depth=4, random_state=0)
tree.fit(train_feature, train_class)
print("Training set score: {:.3f}".format(tree.score(train_feature, train_class)))
print("Test set score Decision: {:.3f}".format(tree.score(test_feature, test_class)))

prediction = tree.predict(test_feature)
print("Confusion matrix:")
print(pd.crosstab(test_class, prediction, rownames=['True'], colnames=['Predicted'], margins=True))
cancer = nba.as_matrix()
tree = DecisionTreeClassifier(max_depth=4, random_state=0)

scores = cross_val_score(tree, train_feature,train_class, cv=10)
print("Cross-validation scores: {}".format(scores))
print("Average cross-validation score: {:.2f}".format(scores.mean()))

【问题讨论】:

  • 向我们展示您的数据集示例
  • “球员姓名和球队名称等属性”,这肯定是一个有趣的 wine.csv。

标签: machine-learning scikit-learn classification decision-tree sklearn-pandas


【解决方案1】:

通常 DT 之后的下一步是 RF(和它的邻居)或 XGBoost(但它不是 sklearn)。试试看。而且 DT 很容易过拟合。

去除异常值。检查数据集中的类:如果它们不平衡,则可能存在大多数错误。在这种情况下,您需要在拟合或度量函数中使用权重(或使用 f1)。

您可以在此处附上您的混淆矩阵 - 很高兴看到。

此外,NN(甚至来自 sklearn)可能会显示出更好的结果。

【讨论】:

    【解决方案2】:

    改进您的预处理。

    DT 和 kNN 等方法可能对您预处理列的方式很敏感。例如,DT 可以从连续变量的良好选择阈值中受益匪浅。

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2019-10-21
      • 2019-11-27
      • 1970-01-01
      • 2020-09-26
      • 2013-12-17
      相关资源
      最近更新 更多