使用监督学习,利用在位置上获取wifi列表的强度,来预测当前所处的房间。是一个多分类的监督学习例子。
locating_data.csv 用来训练的数据
locating_test.csv 用来测试预测结果准确率,在本网站页脚软件下载中下载此二csv文件。
准备了一份wifi强度的数据,同时打上了area(区域数据), shanghai(上海房),zhuhai(珠海房), man(男厕), women(女厕)标签。
也就是将室内分为四个房间的数据和四个房间以外的数据。
工具准备:Jupyter Notebook
a数据读取与处理
#引入包 import pandas as pd # 设置输出所有的变量 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all" #读取数据 train_data = pd.read_csv('locating_data.csv') test_data = pd.read_csv('locating_test.csv') train_data = train_data.fillna(0) #将空值进行填充为0 test_data = test_data.fillna(0) #测试数据做相同处理 train_data.head() #输出查看结果
b提取特征,13个wifi的强度作为训练的特性
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)
c使用sklearn的多分类算法进行训练
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); #喂入训练输入和输出数据
d将测试数据输入进行预测结果
preds = clf.predict(test_x) preds.head()
e计算结果正确率,将准备好的正确结果test_y和预测到的结果preds,进行计算
from sklearn.metrics import accuracy_score score = accuracy_score(test_y, preds) print(score)
f将预测结果以csv格式导出
submission = pd.DataFrame({ 'label': preds }) submission.to_csv('predit_result.csv', index=False)
以上是一个简单的监督学习的例子,使用13个wifi的强度进行位置的预测。