某品牌电动汽车给出了不同规格的电动车属性与价格数据(见 train.xlsx),另有一批未 知价格的电动车属性数据(见 test.xlsx)。
附: 1、属性的具体含义请见:tag.xlsx 2、价格已分档,为 0-3 之间的一个整数,请将最后的预测也以分档的形式给出。
里面包含的数据在这里:
链接:https://pan.baidu.com/s/1C6R9M8pRJdl-WO8lxMYZyQ
提取码:cpfn
复制这段内容后打开百度网盘手机App,操作更方便哦
以方差选择法、相关系数法、互信息法作为分析的主要方法,以MATLAB为分析工具,得出影响电动汽车价格的主要价值属性。在此基础上,我们使用熵值法对选出的电动汽车主要属性进行确定和验证,确保主要属性的精确性及有效性。
最后根据筛选出的主要特征进行分类预测,下面附上基于KNN的程序:
import numpy as np
import operator
from sklearn.metrics import classification_report,confusion_matrix
import operator
import pandas as pd
import sklearn
import csv
# KNN算法
def knn(x_test, x_data, y_data, k):
'''
x_test:测试数据
x_data:已知数据
y_data:已知数据的标签
K:选择K个最近的实例
返回k个中标签最多的类别
'''
# 计算样本数量
x_data_size = x_data.shape[0]
# 复制x_test
np.tile(x_test, (x_data_size,1))
# 计算x_test与每一个样本的差值
diffMat = np.tile(x_test, (x_data_size,1)) - x_data
# 计算差值的平方
sqDiffMat = diffMat**2
# 求和
sqDistances = sqDiffMat.sum(axis=1)
# 开方
distances = sqDistances**0.5
# 从小到大排序
sortedDistances = distances.argsort()
classCount = {}
for i in range(k):
# 获取标签
votelabel = y_data[sortedDistances[i]]
# 统计标签数量
classCount[votelabel] = classCount.get(votelabel,0) + 1
# 根据operator.itemgetter(1)-第1个值对classCount排序,然后再取倒序
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse=True)
# 获取数量最多的标签
return sortedClassCount[0][0]
if __name__ == "__main__":
# 载入数据
data = np.genfromtxt("C:\\Users\\User\\Desktop\\train.csv",delimiter=",")
x_data = data[1:,1:21] # 全部特征值
y_data = data[1:,21] # 价格档位
# 测试数据
unknown_data = np.genfromtxt("C:\\Users\\User\\Desktop\\test.csv",delimiter=",")
test_data = unknown_data[1:,1:21]
# 将每行数据进行对比并写入一个新的文档,遍历做法
for j in range(len(test_data) - 1):
x_test = test_data[j:j+1, :21]
result = []
result.append(knn(x_test, x_data, y_data, 5))
output = (',').join(str(i) for i in result) # 去掉中括号
# 写入数据
namefile = open("C:\\Users\\User\\Desktop\\result.csv", 'a') # 以'w'的方式打开会覆盖以前的数据 以'a'写入,若存在,则在末尾追加写入
namefile.write(str(output))
namefile.write('\n') # 换行
namefile.close()
最后预测结果会在result.csv文件里面,我这里是用一个新的文件写入。
来源:CSDN
作者:疯狂爱学习
链接:https://blog.csdn.net/Python_Matlab/article/details/103241564