电动汽车价格预测

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-26 10:14:08

某品牌电动汽车给出了不同规格的电动车属性与价格数据(见 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文件里面,我这里是用一个新的文件写入。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!