机器学习(四)SVM之预测一栋大楼进出楼门的人数

预测一栋大楼进出楼门的人数

  • 实验内容
  • 详细步骤
  • 源代码和数据集
  • 实验结果
  • 总结


实验内容

我们将建立一个SVM来预测一栋大楼进出楼门的人数。


详细步骤

import numpy as np
from sklearn import preprocessing
from sklearn.svm import SVC

input_file = 'building_event_binary.txt'
# input_file = 'building_event_multiclass.txt'

# 读取数据
X = []
count = 0
with open(input_file, 'r') as f:
    for line in f.readlines():
        data = line[:-1].split(',')
        X.append([data[0]] + data[2:])

X = np.array(X)     #把数据全部添加到X当中

# 将字符串格式转化成数字格式
label_encoder = [] 
X_encoded = np.empty(X.shape)
for i,item in enumerate(X[0]):
    if item.isdigit():
        X_encoded[:, i] = X[:, i]
    else:
        label_encoder.append(preprocessing.LabelEncoder())
        X_encoded[:, i] = label_encoder[-1].fit_transform(X[:, i])

X = X_encoded[:, :-1].astype(int)
y = X_encoded[:, -1].astype(int)

# 使用径向基函数、概率输出和平衡方法训练SVM分类器
# 建立SVM模型
params = {'kernel': 'rbf', 'probability': True, 'class_weight': 'balanced'}# 微调!!!
classifier = SVC(**params)
classifier.fit(X, y)

# 交叉验证
from sklearn import model_selection

accuracy = model_selection.cross_val_score(classifier,
        X, y, scoring='accuracy', cv=3)
print("Accuracy of the classifier: " + str(round(100*accuracy.mean(), 2)) + "%")

# 用一个新的数据点测试SVM
# 对单一数据示例进行编码测试
input_data = ['Tuesday', '12:30:00','21','23']
input_data_encoded = [-1] * len(input_data)
count = 0
for i,item in enumerate(input_data):
    if item.isdigit():
        input_data_encoded[i] = int(input_data[i])
    else:
        input_data_encoded[i] = int(label_encoder[count].transform([input_data[i]]))
        count = count + 1 

input_data_encoded = np.array(input_data_encoded)
input_data_encoded = input_data_encoded.reshape(1, len(input_data))

# 为特定数据点预测并打印数据结果
output_class = classifier.predict(input_data_encoded)
print("Output class:", label_encoder[-1].inverse_transform(output_class)[0])

源代码和数据集

链接:https://pan.baidu.com/s/1PkUHc_F7eXyoDMsHcESzXQ
提取码:ezp7
复制这段内容后打开百度网盘手机App,操作更方便哦

实验结果

(1) 当使用的数据集是building_event_binary.txt,运行结果如下:

在这里插入图片描述

(2) 当使用的数据集是building_event_multiclass.txt时,运行结果如下 :

在这里插入图片描述


总结

由于是Python3.7版本,要添加下面两句

int(label_encoder[count].transform([input_data[i]]))

input_data_encoded = input_data_encoded.reshape(1, len(input_data))

你可能感兴趣的:(机器学习,python,机器学习,svm,pycharm)