Python机器学习:利用多项式回归预测过滤效率并寻找最大值
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split,cross_val_score
from sklearn.linear_model import Lasso, Ridge, LinearRegression as LR
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import r2_score, explained_variance_score as EVS, mean_squared_error as MSE
# 读取数据
data=pd.read_excel('C题数据.xlsx',sheet_name=2)
print(data)
x = data[['接收距离(cm)', '热风速度(r/min)', '厚度mm', '孔隙率(%)', '压缩回弹性率(%)', '过滤阻力Pa','透气性 mm/s']]
y = data['过滤效率(%)']
from sklearn.preprocessing import PolynomialFeatures #StandardScaler
#degree 表示多项式的维度,即^2, interaction_only表示是否仅使用a*b, include_bias表示是否添加一列全部等于1的偏置项
po = PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)
x_poly = po.fit_transform(x)
# 使用pd.DataFrame将数据转换为pd格式
x_poly = pd.DataFrame(x_poly,
columns=['接收距离(cm)', '热风速度(r/min)', '厚度mm', '孔隙率(%)', '压缩回弹性率(%)', '过滤阻力Pa', '透气性 mm/s', '接收距离(cm)^2', '接收距离(cm)*热风速度(r/min)', '接收距离(cm)*厚度mm', '接收距离(cm)*孔隙率(%)', '接收距离(cm)*压缩回弹性率(%)','接收距离(cm)*过滤阻力Pa', '接收距离(cm)*透气性 mm/s','热风速度(r/min)^2','热风速度(r/min)*厚度mm','热风速度(r/min)*孔隙率(%)', '热风速度(r/min)*压缩回弹性率(%)','热风速度(r/min)*过滤阻力Pa', '热风速度(r/min)*透气性 mm/s','厚度mm^2', '厚度mm*孔隙率(%)', '厚度mm*压缩回弹性率(%)', '厚度mm*过滤阻力Pa', '厚度mm*透气性 mm/s','孔隙率(%)^2', '孔隙率(%)*压缩回弹性率(%)', '孔隙率(%)*过滤阻力Pa', '孔隙率(%)*透气性 mm/s','压缩回弹性率(%)^2', '压缩回弹性率(%)*过滤阻力Pa', '压缩回弹性率(%)*透气性 mm/s','过滤阻力Pa^2', '过滤阻力Pa*透气性 mm/s','透气性 mm/s^2'])
print(x_poly.head())
x_train2, x_test2, y_train2, y_test2 = train_test_split(x_poly, y, test_size=0.2, random_state=1)
reg2 = LR().fit(x_train2, y_train2)
yhat2 = reg2.predict(x_test2)
print(yhat2)
print(reg2.coef_)
print(reg2.intercept_)
#可视化
t = np.arange(len(x_test2))
plt.plot(t, y_test2, 'r-', linewidth=2, label='Actual')
plt.plot(t, yhat2, 'g-', linewidth=2, label='Predicted')
plt.title('Actual test y & Predicted test y')
plt.legend(loc='upper right')
plt.grid()
plt.show()
# 寻找函数y的最大值点
from scipy import optimize
def target_function(x):
return reg2.predict([x])[0]
# 设置初始猜测值
initial_guess = [0] * len(x_train2.columns) # 假设初始猜测值为全0向量
result = optimize.minimize(target_function, initial_guess, method='Nelder-Mead')
max_point = result.x
max_value = result.fun
print('最大值点:', max_point)
print('最大值:', max_value)
原文地址: https://www.cveoy.top/t/topic/fOgq 著作权归作者所有。请勿转载和采集!