机械学习之线性回归篇,简单易懂

        这里用的案例是自己创的两个数组,分别是身高和体重,建立和训练模型,然后绘制图像,以及通过R的平方检测模型好坏,最后随意输入一个身高预测他的体重。(这里只是拿了个简单的数据当例子,真实情况需要大量数据训练模型)

#一条直线产生的误差较小就可以认为这条线拟合度较高
#l=(y1-y)^2+(y2-y)^2.......越小越好  这里的y是拟合直线上x对应的y

#身高与体重呈线性回归
from sklearn import linear_model
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

#划分数据集必须是二维数据所以要将用reshape转换成二维数据-1表示自动识别行a*b/m(列)
#这个数据是我随便打的,一般就是身高越高越重
x=np.array([160,155,156,178,166,158]).reshape(-1,1)
y=np.array([50,45,44,66,55,47]).reshape(-1,1)
print(x,y)

#划分数据集
X_train,X_test,Y_train,Y_test=train_test_split(x,y,train_size=0.8)#80%作为训练数据集20%作为测试数据集

#拟合数据,训练数据
regr=linear_model.LinearRegression()
regr.fit(X_train,Y_train)
#score得到的返回结果是决定系数R的平方值,越大越好
score=regr.score(X_train,Y_train)
'''
决定系数的平方值R^2=1-u/v
u=(y的实际值-y的预测值)的平方求和 越小越好
v=(y的实际值-y的实际值的平均值)的平方求和  越小越好
'''
print(score)

#绘图
#解决中文输出问题
font={
    "family":"SimHei",#这个是设置字体的
    "size":"20" #设置字体的大小
}
plt.rc("font",**font)
#训练的点
plt.scatter(X_train,Y_train,color="red")
#测试的点
plt.scatter(X_test,Y_test,color='black')
#拟合的直线
plt.plot(x,regr.predict(x),color='green')
#行列标签
plt.xlabel('身高')
plt.ylabel('体重')
#标题
plt.title('身高与体重的线性回归分析')
plt.show()

#预测
#输出163身高对应多少斤
result=regr.predict([[163]])
print(result)

机械学习之线性回归篇,简单易懂_第1张图片

 

你可能感兴趣的:(机械学习,线性回归,sklearn,python)