如何为给定的数据集明智地选择机器算法?

数据挖掘 机器学习 Python 可视化 机器学习模型 相关性
2022-02-14 03:00:56

我有一个来自三个不同设备的 RSSI 值数据样本,并且基于 RSSI 样本,它应该告诉数据样本是从哪个位置到达的。以下是样本数据集,

 device_1  device_2  device_3  location
 -45       -56       -78       drawing_room
 -48       -51       -82       drawing_room
 -41       -59       -73       drawing_room
 -71       -59       -59       conference
 -69       -60       -65       conference
 -73       -60       -52       conference
 -33       -68       -64       kitchen
 -32       -66       -63       kitchen
 -37       -67       -61       kitchen
 -63       -48       -48       lab
 -62       -48       -46       lab
 -59       -48       -54       lab

对于“m”个位置,我将有“n”个数据样本。实际数据集可以在这里找到。

我想从 d1 d2 d3 预测“位置”。基于哪些参数(即相关矩阵或可视化),可以为给定的数据集选择机器学习算法?

所考虑的数据集的可视化图表是在此处输入图像描述

从可视化图表来看,是不是意味着只有“device_1”和“device_2”列与其他列相比,位置之间的分离度很好?

注意:如果需要,可以将数据样本视为阳性。

1个回答

我使用了一个简单的神经网络,它有 3 个输入 - 1 个隐藏层和 8 个神经元 - 3 个输出(标签),在 keras 中为您的数据集进行了 k 折交叉验证。

import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import LabelEncoder, scale
from sklearn.pipeline import Pipeline

path = r"User\train.csv"
data = pd.read_csv(path)

data.location.value_counts()
dataset = data.values

x = dataset[:,0:3]
x_scaled = scale(x)
y = dataset[:,3]


encoder = LabelEncoder()
encoder.fit(y)
encoded_Y = encoder.transform(y)

dummy_y = np_utils.to_categorical(encoded_Y)

def model():
    model = Sequential()
    model.add(Dense(8, input_dim=3, activation='relu'))
    model.add(Dense(3, activation='softmax'))

    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    return model



estimator = KerasClassifier(build_fn=model, epochs=200, batch_size=5, verbose=0)
kfold = KFold(n_splits=10, shuffle=True)

results = cross_val_score(estimator, x_scaled, dummy_y, cv=kfold)
print("Model Prediction: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))

使用的模型可以正确分类大约 94% 的数据。也许这有助于开始。

Out:
Prediction: 93.95% (3.13%)

一般来说,在数据科学和统计学中,你必须尝试训练几个模型,看看哪个最适合你的数据集(模型基准测试)。最后,它通常是计算成本和准确性之间的权衡。