各位人才最近在学习机器学习相关的可以,遇到了一个疑惑请人才帮忙看一下,感谢~
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
# 读取数据
dataxls = pd.read_excel('2023forfootball.xlsx', sheet_name='Sheet2')
Y = dataxls["结果"]
X = dataxls[["让球", "胜初", "平初", "负初", "胜", "平", "负"]].values
# 创建并拟合模型
knn = KNeighborsClassifier(n_neighbors=10,weights='distance')
knn.fit(X, Y)
# 新数据
new_data = [[-1, 2.17, 3.29, 3.04,-1,1,1]]
# 获取类别名称
class_labels = ['胜', '平', '负']
# 预测新数据的概率
probabilities = knn.predict_proba(new_data)
# 打印每个类别的概率
print("新数据点的概率预测:")
for i, prob in enumerate(probabilities[0]):
print(f"{class_labels[i]}: {prob * 100:.2f}%")
# 获取最近邻的索引
distances, indices = knn.kneighbors(new_data)
# 从原始数据中检索最近邻的完整数据
nearest_neighbors = dataxls.iloc[indices.flatten()]
# 打印最近邻的完整数据
# print("\n参考的最近邻数据:")
# print(nearest_neighbors.to_string(index=False))
# 打印最近邻数据的距离百分比
max_distance = max(distances.flatten()) # 找到最大距离
distances_percentage = [((distance / max_distance) * 100) for distance in distances.flatten()]
nearest_neighbors['Distance_Percentage'] = distances_percentage
# 格式化输出最近邻的完整数据和距离百分比
print("\n最近邻的完整数据和距离百分比:")
print(nearest_neighbors.to_string(index=False))
输出结果
新数据点的概率预测:
胜: 41.12%
平: 19.58%
负: 39.30%
id 时间 序号 赛事 主队 客队 让球 胜初 平初 负初 胜终 平终 负终 半场 全场主 全场客 结果 胜 平 负 Distance_Percentage
1017786 2023-02-19 周日001 澳超 阿德莱德联 西悉尼 -1 2.03 3.25 2.97 2.20 3.20 2.69 2-1 4 4 平 -1 1 1 75.572215
1019650 2023-05-28 周六021 美职足 纽约城 费城 -1 2.04 3.20 2.98 2.17 3.10 2.82 1-2 1 3 负 -1 1 1 79.108822
1017534 2023-02-09 周三003 法国杯 里昂 里尔 -1 1.99 3.30 3.00 2.25 2.90 2.86 2-1 2 2 平 -1 1 1 86.381171
1019574 2023-05-22 周日016 葡超 费雷拉 里奥阿维 -1 1.98 3.25 3.08 2.30 3.00 2.70 1-1 3 1 胜 -1 1 1 92.733825
1021780 2023-11-13 周日021 葡超 本菲卡 里斯本 -1 2.00 3.35 2.95 2.41 3.15 2.46 0-1 2 1 胜 -1 1 1 94.255113
1019668 2023-05-29 周日018 意甲 尤文图斯 AC米兰 -1 2.10 3.15 2.90 2.23 3.00 2.80 0-1 0 1 负 -1 1 1 98.233857
1021239 2023-10-11 周二004 英锦标赛 切尔滕汉姆 纽波特郡 -1 2.00 3.35 2.93 2.04 3.30 2.90 0-1 0 2 负 -1 1 1 98.789168
1019649 2023-05-28 周六020 美职足 奥兰多城 亚特联 -1 2.00 3.35 2.93 2.05 3.33 2.85 1-0 1 1 平 -1 1 1 98.789168
1022429 2023-12-17 周日009 意甲 乌迪内斯 萨索洛 -1 2.02 3.35 2.90 2.20 3.05 2.80 1-0 2 2 平 -1 1 1 100.000000
1022577 2023-12-23 周六016 英冠 布莱克本 沃特福德 -1 2.02 3.35 2.90 2.25 3.30 2.55 1-0 1 2 负 -1 1 1 100.000000
很明显这个预测结果和最近邻的完整数据 的结果 不一致,这是为甚,请帮忙看一些呗,感谢!