提高二进制分类模型的准确性

时间:2019-06-05 13:48:14

标签: python machine-learning classification data-science

因此,作为大型项目的一部分,我正在研究一种基本的机器学习算法。在本节中,我试图教机器使用两组数据,一组较小的仅具有一个功能,而较大的一组具有六个功能。这两个都可以在下面看到。

large data set

small data set

“标志”是我要预测的。标志0表示实际/正常数据,标志1表示“异常”数据。因此,我的目标是允许预测“异常”数据输入。从照片中可以看出,用于这些目的的“异常”数据与以前的数据点相比发生了重大变化。问题是,计算机只能预测我插入到数据中的450个左右的“假”数据中的大约80个。第二个问题是计算机对某些数据进行了错误分类,而是称某些真实数据为假。

我现在一直在对小型数据集进行大部分测试,只是为了使所有功能正常运行。我正在使用XGBoost算法,其中n_estimators等于1000,学习速率为0.05。代码很简单。

data = pd.read_csv('final_angles.csv')
data.dropna(axis=0, subset=['steering_angle'], inplace=True)
y = data.flag
X = data.drop(['flag', 'frame_id'], axis=1)
train_X, test_X, train_y, test_y = train_test_split(X.as_matrix(), y.as_matrix(), test_size=0.25, shuffle=False)

my_model = XGBRegressor(n_estimators=1000, learning_rate=0.05) 
my_model.fit(train_X, train_y, early_stopping_rounds=5, 
             eval_set=[(test_X, test_y)], verbose=False)

predictions = my_model.predict(test_X)

如果预测值超过0.5,则任何东西都被视为“伪造”或“异常”。

例如,这就是我产生的:

文件中有457个“假”数据部分。我们猜测有108个数据点是假的。其中只有69个实际上是假的。我们在457(0.15098468271334792)中得到69个。

我可以做些什么来改善结果吗?尽管我不知道会有多大帮助,但我曾经考虑过更改算法。使用随机森林或其他方法会有所帮助,或者可能会进一步调整参数吗?我愿意接受任何想法。

2 个答案:

答案 0 :(得分:1)

我不会说更改算法/搜索超参数会大大提高分类性能。

我认为,您应该处理数据

在您的数据中,机器看到的是行数据,但是您说决定flag值的是与前一个数据点的实质性改变

所以您应该考虑:

  • 尝试使用适用于时间序列数据的算法
  • 或尝试进行一些特征工程设计,以便机器在每行/每行都能查看更改是否与先前的行/行相比实质性

以下是一些有用的链接,从何处开始:

How to classify movement data (time series) in real time

Using time series data from a sensor for ML

How to train model to predict events 30 minutes prior, from multi-dimensionnal timeseries

答案 1 :(得分:0)

关于更改算法:

处理机器学习问题的一种常见方法是首先定义解决方案应胜过的基准方法。 有时可以使用像朴素贝叶斯这样的简单方法,无需将其调整为该基准。

关于改善结果:

您如何选择每组数据的功能? 尽管我们可以通过调整n_estimator和learning_rate值的算法来调整算法,但其结果仍然取决于研究的特征工程阶段的质量。

参考: https://tech.olx.com/ranking-ads-with-machine-learning-ee03d7734bf4