轻松管理多个织梦网站,重庆平台网站推广,做淘宝客网站教程,cms开源系统php什么是线性回归#xff1f; 回归分析是一种统计学方法#xff0c;用于研究自变量和因变量之间的关系。它是一种建立关系模型的方法#xff0c;可以帮助我们预测和解释变量之间的相互作用。
回归分析通常用于预测一个或多个因变量的值#xff0c;这些因变量的值是由一个或多…什么是线性回归 回归分析是一种统计学方法用于研究自变量和因变量之间的关系。它是一种建立关系模型的方法可以帮助我们预测和解释变量之间的相互作用。
回归分析通常用于预测一个或多个因变量的值这些因变量的值是由一个或多个自变量的值所决定的。回归分析的目标是建立一个数学模型来描述因变量和自变量之间的关系。
这个数学模型可以是线性或非线性的可以包含一个或多个自变量。通过回归分析我们可以使用已知的自变量和因变量值来计算模型参数然后使用这些参数来预测因变量值。
回归分析被广泛应用于各种领域包括经济学、社会学、医学、环境科学和工程学等。它可以用于研究许多不同的问题如房价预测、销售预测、股票价格预测、人口增长预测等等。线性回归需要满足的条件
1自变量和因变量在理论上有因果关系2因变量为连续型变量3各自变量与因变量之间存有线性关系4残差要满足正态性、独立性、方差齐性。5多个自变量不存在多重共线性其中线性Linear、正态性Normal、独立性independence、方差齐性Equal Variance俗称LINE是线性回归分析的四大基本前提条件。 sklearn的线性回归 准备工作from sklearn.linear_model import LinearRegression创建模型 linear LinearRegression()拟合模型 linear.fit(x,y)模型的预测值 linear.predict(输入数据)线性回归模型的权重linear.coef_和偏置linear.intercept_ class sklearn.linear_model.LinearRegression (fit_interceptTrue, normalizeFalse, copy_XTrue, n_jobsNone) 参数 含义 fit_intercept布尔值可不填默认为True是否计算此模型的截距。如果设置为False则不会计算截距 normalize布尔值可不填默认为False当fit_intercept设置为False时将忽略此参数。如果为True则特征矩阵X在进入回归之前将会被减去均值中心化并除以L2范式缩放。如果你希望进行标准化请在fit数据之前用preprocessing模块中的标准化专用类StandardScaler copy_X布尔值可不填默认为True如果为真将在X.copy()上进行操作否则的话原本的特征矩阵X可能被线性回归影响并覆盖 n_jobs整数或者None可不填默认为None用于计算的作业数。只在多标签的回归和数据量足够大的时候才生效。除非None在joblib.parallel_backend上下文中否则None统一表示为1。如果输入 -1则表示使用全部的CPU来进行计算。 线性回归代码
线性回归直接预测血糖值:return: None# 获取数据lb readcvs()# print(lb)# 分割数据集到训练集和测试集,按照75%:25%的比例进行数据分配训练数据和测试数据x_train, x_test, y_train, y_test train_test_split(lb[data], lb[target], test_size0.2)# 进行标准化处理目标值要进行标准化处理# 特征值和目标值都必须进行标准化处理, 实例化两个标准化API# 标准化也就是归一化处理# std_x StandardScaler()# # 标准化训练数据# x_train std_x.fit_transform(x_train)# # 标准化测试数据# x_test std_x.transform(x_test)## # 目标值# std_y StandardScaler()# # 标准化目标训练数据因为数据是[y,y,1,1,1,1,...]变换成[[],[],[],[],[]...]进行变换# y_train std_y.fit_transform(y_train.reshape(-1, 1))# # 标准化目标测试数据同上# y_test std_y.transform(y_test.reshape(-1, 1))# estimator预测# 正规方程求解方式预测结果lr LinearRegression()print(多项式参数,l_data)# 对训练数据进行拟合lr.fit(x_train, y_train)# # 查看w的参数print(w参数,lr.coef_)# # 查看b的参数print(b参数,lr.intercept_)# 保存训练模型# 预测测试集的房子价格# y_lr_predict std_y.inverse_transform(lr.predict(x_test))y_lr_predict lr.predict(x_test)print(正规方程测试集里面每个血糖的预测: , y_lr_predict)# print(正规方程的均方误差: , mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))score_ lr.score(x_test, y_test)print(模型得分, score_)# 保存血糖模型数据if score_ 0.2:joblib.dump(lr, ./model/blood.pkl)return score_def train_():count0sys.setrecursionlimit(100000) # 设置递归深度list[]#循环10000次for i in range(10000):score train()list.append(score)count count1print(最高得分, max(list))if score0.2:breakprint(最高得分,max(list))#加载模型准备预测
def predict():list[[1, 80.0, 179, 55,421,0]]valuenp.array(list)# 导入血糖模型数据lr joblib.load(./model/blood.pkl)#直接预测结果y_lr_predictlr.predict(value)print(y_lr_predict)#返回模型预测出来的血糖值return y_lr_predictif __name__ __main__:train_()
多项式回归
多项式回归
from sklearn.preprocessing import PolynomialFeatures
# 设置多项式阶数为2,其他值默认
# degree 多项式阶数
poly PolynomialFeatures(degree2)
res poly.fit_transform(X) PolynomialFeatures详细探讨
现在有ab两个特征使用degree2的二次多项式则为1a, a^2, ab, b ,b^2)。
PolynomialFeatures主要有以下几个参数degree度数决定多项式的次数interaction_only 默认为False字面意思就是只能交叉相乘不能有a^2这种.include_bias: 默认为True, 这个bias指的是多项式会自动包含1设为False就没这个1了.order有C 和F 两个选项。官方写的是在密集情况dense case下的输出array的顺序F可以加快操作但可能使得subsequent estimators变慢。 如何控制多项式回归的系数a[[2,3]] 或者a[[2],[3]]
from sklearn.preprocessing import PolynomialFeatures
a[[2,3]]相当于[[x1,x2]]
pfPolynomialFeatures(degree2)
print(pf.fit_transform(a)) #会产生多项式的系数
#[[1. 2. 3. 4. 6. 9.]] 相当于1232*22*33*3
pfPolynomialFeatures(degree2,include_biasFalse)
print(pf.fit_transform(a))
#[[2. 3. 4. 6. 9.]]
pfPolynomialFeatures(degree2,interaction_onlyTrue)
print(pf.fit_transform(a))
#[[1. 2. 3. 6.]]如果是c[[a],[b]]这种形式生成的多项式就没有ab交叉项了只有[[1,a,a^2], [1,b,b^2]] 。
c[[2],[3]]
print(pf.fit_transform(c))
[[1. 2. 4.][1. 3. 9.]]
转换器Transformers 通常与分类器、回归器或其他估计器相结合构成一个复合估计器。最常见的工具是pipeline。
利用Pipline进项多项式和线性回归合并这样会产生非线性的回归
lr Pipeline([(poly, PolynomialFeatures(degree2)),(clf, LinearRegression())])
lr.fit(x_train, y_train)
多项式和线性回归相结合
lr LinearRegression()
pfPolynomialFeatures(degree2)
lr.fit(pf.fit_transform(X), y)
print(lr.coef_)
print(lr.intercept_)
对应w和b对应多项式的斜率和截距
[0.1 1.413 -0.435]
-1.584092
回归的俩中线性和非线性
# 线性回归
clf1 LinearRegression()
clf1.fit(x, y)
y_l clf1.predict(x) # 线性回归预测值# 非线性回归
ployfeat PolynomialFeatures(degree3) # 根据degree的值转换为相应的多项式非线性回归
x_p ployfeat.fit_transform(x)
clf2 LinearRegression()
clf2.fit(x_p, y)