机械学习之线性回归篇,简单易懂
这里用的案例是自己创的两个数组,分别是身高和体重,建立和训练模型,然后绘制图像,以及通过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)
上一篇:
通过多线程提高代码的执行效率例子