PUBG 吃鸡排名预测

对于一般机器学习来说,总体的流程其实分为三个大的步骤:

1. 数据清洗
2. 模型构建
3. 模型评估

其中,第二步和部分第三步都是靠套路进行解决的,所需要修改的部分只是一些调参,可以使用gridCV 的方法进行调参,很多情况下能得到不错的效果。
所以其实最难的部分主要其实还是数据清洗,相对于调用库来说,怎样把数据清洗成有用的、自己想要的格式,是一个最大的问题。

数据清洗难题的解决办法

个人认为机器学习相对于深度学习简单的一个原因,就是因为机器学习的可解释性很强,每一步都可以根据实际情况进行解释,所以带入实际问题去理解数据是个不错的选择,例如本例中,无武器杀人,或者单场杀人过多,行走距离过短,没有掉血行为的,都很有可能是外挂。在入门比赛泰坦尼克号的代码中,这个问题会更加明显。。

整个流程的套路:

流程分析:

  1. 获取数据
    1.1 数据集说明
    x, y 位置坐标
    accuracy 位置的准确率
    time 时间戳
    placeid 位置点

  2. 基本数据处理
    2.1 太大了,缩小数据范围
    2.2 #- assists [助攻数]
    #- boosts [使用能量,道具数量]#- damageDealt [总伤害]
    #- DBNOs [击倒敌人数量]
    #- heals [使用治疗药品数量]
    #- killPlace [本场比赛杀敌排行]

  • kills [杀敌数]
  • killStreaks [连续杀敌数]
  • matchDuration [比赛时长]
  • rankPoints [Elo排名]
  • revives [救活队员的次数]
  • rideDistance [驾车距离]
  • teamKills [杀死队友的次数]
  • vehicleDestroys [毁坏机动车的数量]
  • walkDistance [步行距离]
  • winPoints [胜率Elo排名]
  • winPlacePerc [百分比排名]
    2.3 筛选出签到多的地方
    2.4 确定特征值、目标值
    2.5 分割数据集
  1. 特征工程
    3.1 数据标准化

  2. 机器学习(knn + cv)

  3. 模型评估

数据在这儿:

https://pan.baidu.com/s/1TrcWYfTaJrHZGWXQ_R_l8Q 提取码acdf

代码如下:

# 1. 获取数据
file_path = "./pubg/PUBG_to_stu/data/train_V2.csv"
df = pd.read_csv(file_path)
print(df.head())
print(df.shape)
# 2. 基本数据处理
# 2.1 去掉na
df_0 = df.dropna(axis=0, how='any')
print(df_0.shape)
# 2.2 选取部分数据
df_part = df_0
print(df_part.shape)
# 收集武器数为0,有击杀数
df_part_distance["weapon"] = (df_part_distance["kills"] > 0) & (df_part_distance["weaponsAcquired"] == 0)
df_part_d_weapon = df_part_distance.drop(df_part_distance[df_part_distance["weapon"] == True].index)
print(df_part_d_weapon.shape)
#  击杀值过高
df_part_d_w_kills = df_part_d_weapon.drop(df_part_d_weapon[df_part_d_weapon["kills"]>30].index)
# 爆头率过高
df_part_d_w_kills['headshot_rate'] = df_part_d_w_kills['headshotKills'] / df_part_d_w_kills['kills']
df_part_d_w_kills['headshot_rate'] = df_part_d_w_kills['headshot_rate'].fillna(0)
df_part_d_w_k_heads = df_part_d_w_kills.drop(df_part_d_w_kills[(df_part_d_w_kills['headshot_rate'] == 1) & (df_part_d_w_kills['kills'] > 9)].index)
print(df_part_d_w_k_heads.shape)
# 2.3 筛选一些有用的列
df_select = df_part_d_w_k_heads[["assists","boosts","DBNOs","heals","kills","matchDuration","rankPoints","revives","rideDistance","teamKills",
                     "vehicleDestroys","walkDistance","winPoints"]]
print(df_select.shape)
# 2.4 确定特征值、目标值
x = df_select
y = df_part_d_w_k_heads[["winPlacePerc"]]
print(x.shape)
print(y.shape)
# 3. 特征工程
# 3.1 数据标准化
# 3.1.1 实例化标准化对象
transfer = StandardScaler()
# 3.1.2调用fit_trainsform 先计算均值,标准差,在进行标准化
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
print("完成标准化")
# 4. 机器学习(knn + cv)
# 4.1 实例化估计器
estimator =Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
                 normalize=False, random_state=None, solver='auto', tol=0.001)
# 4.2 训练
estimator.fit(x_train, y_train)
print("完成训练")
# 5. 模型评估
# 5.1 预测值输出
y_pre = estimator.predict(x_test)
print("预测值:", y_pre)
print("完成预测")
# 5.2 score
score = estimator.score(x_test, y_test)
print("准确率:", score)
mae = mean_absolute_error(y_test, y_pre)
print(mae)
### PUBG 游戏排名预测优化方法 在游戏中实现有效的玩家排名预测对于提升用户体验至关重要。通过机器学习技术可以构建更精准的模型来评估和预测玩家表现。 #### 数据收集与预处理 为了建立可靠的预测模型,数据的质量尤为关键。应采集多维度的数据集,包括但不限于玩家的历史战绩、击杀数、生存时间等特征[^2]。这些数据经过清洗和标准化处理后作为训练样本输入到算法中。 #### 特征工程 选取合适的特征变量能够显著提高模型性能。除了基本的游戏统计数据外,还可以考虑加入时空因素以及团队协作模式的影响因子。例如,在大逃杀类游戏中,地图位置的选择往往决定了能否获得更好的资源并避开危险区域;而队友间的配合默契度也会影响最终成绩[^3]。 #### 模型选择 针对此类序列决策问题,采用强化学习框架下的策略网络是一个不错的选择。该种方式允许系统根据当前状态动态调整行动方案以达到最优解。另外,基于高斯先验目标函数的方法同样适用于此场景下参数估计的任务,有助于平滑化输出结果从而减少过拟合现象的发生概率[^1]。 ```python import numpy as np from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM # 假设X为特征矩阵,y为目标向量(即排名) X_train, X_test, y_train, y_test = train_test_split(X, y) model = Sequential() model.add(LSTM(units=50)) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') history = model.fit(X_train, y_train, epochs=10, batch_size=32) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值