大家好,这里是X,好久不见喽,今天带来机器学习有关简单线性回归的问题示例解析,望大家学的开心😎😎😎也算是补了这个星期的机器学习内容了,大家加油哦
题目🤑
数据文件是两支斗地主队伍(A/B)的模拟比赛结果。每支队伍有三位成员,分别负责地主(L)、地主上家(U)、地主下家(D)智能。每局比赛同样的发牌结果比赛两次,一次用A队的L与B队的U、D组成比赛,一次用B队的L与A队的U、D组成比赛,计算两队的得分差作为当局结果。每100局记录一次累计结果,现在想要预测10000局时候的分数🤯
分析、构建模型😏
简单的线性回归其实一般来说就只牵涉到两个变量:x和y
那么做题的时候呢就要去找到这两个变量,然后才能进行拟合和预测🐱🏍在这道题上,问题的最终目标是想要预测10000局的分数,显然这里已经有两个变量存在了:一个是局数、一个是分数
一般来说,要求什么,就立什么为y(当然这个东西是不一定的啊,看个人,这里是X的习惯,因为要求什么,那么这个东西就是一个结果,结果的话一般就是y值嘛)
那么在这里就让局数表示为x,让y表示目前得到的分数
问题一(太简单了就过啦)
你要写一个函数train(file_name),对于传进来的数据文件file_name,打开数据文件,并返回有多少行数据。注意 第一行是说明文字,不算数据。
# @coding: utf-8
def train(file_name):
with open(file_name,"r") as f:
return len(f.readlines())-1
问题二
你要写一个函数train(file_name),对于传进来的数据文件file_name,打开数据文件,并返回所有数据的平均值。注意 第一行是说明文字,不算数据。
解题的方法有很多种,大家按照自己的习惯来就行🤠
# @coding: utf-8
def train(file_name):
import numpy as np
f = open(file_name,"r")
lines = f.readlines()
sum = 0
for i in range(1,len(lines)):
sum += int(lines[i])
return sum/(len(lines)-1)
f.close()
问题三(重点)
你要写一个函数train(file_name),对于传进来的数据文件file_name,打开数据文件,用LinearRegression拟合并预测10000局对局后的累计积分差。注意 第一行是说明文字,不算数据。
ppp❗❗❗❗❗❗❗❗
这里有一个很恶心的问题,就是大家要注意一开始的标题:他说的是每一百局才会记录一个数据,也就是说你的x轴的数据不是[1,2,3,…],而应该是[100,200,300,400,…]如果不这样的话,最终测出来的数据跟真正的结果会差很大的❕❕❕❕
# @coding: utf-8
def train(file_name):
import numpy as np
from sklearn.linear_model import LinearRegression
f = open(file_name,"r")
lines = f.readlines()
x = []
y = []
#让X记录每局的局数,y记录每100局的分数
for i in range(1, len(lines)):
y.append(int(lines[i]))
for i in range(1, len(y)+1):
x.append(int(i*100)) #别忘了乘100噢
X = np.array([x]).reshape(-1,1) #相当于“改变、构建”数组的形状
model = LinearRegression() ##创建一个估计器
model.fit(X,y) ##用训练数据拟合
test_model = np.array([[10000]]) # 输入待测的数值(也就是输入x,得到y的那种感觉)
predicted_model = model.predict(test_model)[0]# 预测结果取第一个
return predicted_model
f.close()
机器学习其实并没有那么难,找到x,找到y,然后运用已知的技术,其实答案就已经出来了,重点就是能不能够找对这个x,y,有一些复杂一点的题目,是需要建立多个不同模型的,一样的道理嘛,分开来建立不同的模型就好了💜
好啦,今天的日结到这里就结束了,别忘了点赞、收藏、关注噢💘