机器学习实例——室内定位

背景介绍:

 使用监督学习,利用在位置上获取wifi列表的强度,来预测当前所处的房间。是一个多分类的监督学习例子。

数据准备:

locating_data.csv 用来训练的数据
locating_test.csv 用来测试预测结果准确率
 准备了一份wifi强度的数据,同时打上了area(区域数据), shanghai(上海房),zhuhai(珠海房), man(男厕), women(女厕)标签。
也就是将室内分为四个房间的数据和四个房间以外的数据。

工具准备: Jupyter Notebook

  • 数据读取与处理
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #引入包
    import pandas as pd
    # 设置输出所有的变量
    from IPython.core.interactiveshell import InteractiveShell
    InteractiveShell.ast_node_interactivity = "all"
    #读取数据
    train_data = pd.read_csv('conver_locating_data.csv')
    test_data = pd.read_csv('conver_locating_result.csv')
    train_data = train_data.fillna(0) #将空值进行填充为0
    test_data = test_data.fillna(0) #测试数据做相同处理
    train_data.head() #输出查看结果

image

  • 提取特征,13个wifi的强度作为训练的特性
1
2
3
4
5
6
7
train_x = train_data[['wifi1','wifi2','wifi4','wifi5','wifi6','wifi7','wifi8','wifi9','wifi10','wifi11','wifi12','wifi13']]
train_y = train_data['result']
# test data
test_x = test_data[['wifi1','wifi2','wifi4','wifi5','wifi6','wifi7','wifi8','wifi9','wifi10','wifi11','wifi12','wifi13']]
test_y = test_data['result']
train_x.head(2)
train_y.head(2)

image

  • 使用sklearn的多分类算法进行训练
1
2
3
4
5
from sklearn.multiclass import OutputCodeClassifier
from sklearn.svm import LinearSVC
clf = OutputCodeClassifier(LinearSVC(random_state=0),
code_size=2, random_state=0)
clf.fit(train_x,train_y); #喂入训练输入和输出数据
  • 将测试数据输入进行预测结果
1
2
preds = clf.predict(test_x)
preds.head()
  • 计算结果正确率,将准备好的正确结果test_y和预测到的结果preds,进行计算
1
2
3
from sklearn.metrics import accuracy_score
score = accuracy_score(test_y, preds)
print(score)

image

  • 将预测结果以csv格式导出
1
2
3
4
submission = pd.DataFrame({
'label': preds
})
submission.to_csv('predit_result.csv', index=False)

 以上是一个简单的监督学习的例子,使用13个wifi的强度进行位置的预测。


作者: Jessy Hong