电动汽车价格预测

某品牌电动汽车给出了不同规格的电动车属性与价格数据(见 train.xlsx),另有一批未 知价格的电动车属性数据(见 test.xlsx)。
附: 1、属性的具体含义请见:tag.xlsx 2、价格已分档,为 0-3 之间的一个整数,请将最后的预测也以分档的形式给出。

train的数据形式,要转成csv文件的话,另存,看下图操作即可。
在这里插入图片描述
在这里插入图片描述


里面包含的数据在这里:
链接: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文件里面,我这里是用一个新的文件写入。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值