建立分类模型

时间:2018-11-13 06:36:04

标签: python machine-learning scikit-learn

我有一些1500行30列的学生数据。我用过GradientBoostingClassifier。所有数据均为分类数据,范围为0-80和0-90。

我需要建立一个预测模型来预测学生是否会失败并通过。 “状态”列是我的目标变量。以下是我使用的代码

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
data=data.apply(le.fit_transform)

X=data.copy()
y=data['Status']
# Import train_test_split function
from sklearn.model_selection import train_test_split
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
#Import Gradient Boosting Classifier model
from sklearn.ensemble import GradientBoostingClassifier
gb = GradientBoostingClassifier()
gb.fit(X_train, y_train)

#Predict the response for test dataset
y_pred = gb.predict(X_test)

下面是我的模特表演。

Accuracy: 0.9719317419707395
Precision: 0.9090272918124562
Recall: 0.5650282731622445

请让我知道我应该怎么做才能改进模型以及如何处理各种各样的分类数据。另外,当我在不同的数据集上测试模型时,大多数时候类别由于拼写错误或新添加而改变

std_id  std_name Dem secn_id location bucket Primary_subject status
144     amy      SEP 5.3     P        dev    english         pass
230     mani     SEV 11.3    E        Tech   math            fail
299     sam      DE  5.1     nap      prac   science         pass
568     samy     SEP 1.1     P        prac   V1              pass
769     elle     SEP 1.2     pe       prac   english         pass
761     tanj     SEP 1.3     N        tech   V2              pass
112     jon      ERM 3.0     N        prac   phy             fail
116     pal      NAN 9.1     sc       etc    V1V2            pass
116     pal      NAN 9.2     sc       etc    V1V3            fail
113     josh     NAN 9.3     du       etc.   erp             fail
100     sug      EVV 9.1     sc       NAN    che             pass
323     adi      ERP 3.1     NAN      fit    math            fail
323     adi      ERP 3.2     NAN      fit    math            fail

这是我的输入数据的样子。对于缺少的值,我将其替换为字符串“ NAN”。如果学生更改了任何选项,则有重复的学生记录。

2 个答案:

答案 0 :(得分:1)

您的模型表现不错。 为了进一步改善

  1. 调整GradientBoostingClassifier的参数。您可以为n_estimatorslearning_rate等参数设置值,并检查模型的性能。 对于此任务,我建议使用GridSearchCV

  2. 功能工程:您可以从现有功能中创建新功能。由于您没有提供数据,因此很难提出任何建议。您可以使用Random Forest等检查功能的重要性,并使用具有高重要性的功能。

  3. 您可以尝试不同的算法,例如XGBoostLightGBM甚至是neural network

  4. 您可以使用交叉验证器,例如Stratified ShuffleSplit

关于下一个问题。

同样,在不查看任何数据的情况下很难提出任何建议。 为了避免拼写错误,您可以强制用户从下拉列表等中选择值。 如果不是这种情况,您可以查看difflib库,该库将找到与您的类别最接近的匹配项。

答案 1 :(得分:1)

首先,我建议从一些数据清理和数据分析开始。 您的类别由于错误而更改的事实需要在预处理步骤中解决。这里没有太多捷径,您需要手动检查和修复数据。

还要检查是否存在缺失值。如果缺少价值,您还需要解决此问题。您可以删除样本(接受信息丢失),也可以将缺失值替换为特定功能的平均值。文献中还存在其他方法,但是第一步可以做到这两种方法。

请考虑检查每个班级中的样本数量。如果这两个类别严重不平衡,则可以考虑寻找解决“不平衡数据”的解决方案。

当处理分类变量时,

分类为决策树/随机森林是不错的选择。

使用交叉验证来调整分类器的超参数也可以提高性能。

编辑(在添加数据表之后)

您可能不想使用学生的姓名,因为该功能与考试的成功与否无关。