数据的读取和处理
1 2 3
| data=pd.read_excel('C:\\Users\\cyx94a\\Desktop\\Python\\data\\al6-1.xls') sns.pairplot(data,x_vars=['Q','PL','PF','PK'],y_vars='TC',height=5,aspect=0.6,kind='reg') plt.show()
|
关于pairplot:data指定数据来源,x_vars指定横坐标的种类,y_var指定纵坐标种类,height和aspect是调整输出图像的大小,kind=’reg’则添加一条最佳拟合直线和95%的置信区间
这地方摸索了半天,原来pairplot没办法自己输出图像,必须要借助matplotlib的show命令。size参数也不再用了,现在用height。
1 2
| X=data[['Q','PL','PF','PK']] y=data['TC']
|
整理数据,用DataFrame表征自变量矩阵X,用Series表征因变量y
构造训练集和测试集
1 2
| X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1) print(X_train.shape)
|
sklearn.cross_validation这个方法已经过时了,现在应该改成sklearn.model_selection
X_train, X_test, y_train, y_test:这些是 train_test_split 函数返回的四个变量,分别代表分割后的训练集特征、测试集特征、训练集标签和测试集标签。
train_test_split(X, y):这个函数将 X 和 y 分别分割成训练集和测试集。默认情况下,训练集占总数据的 75%,测试集占 25%。
random_state=1:这是一个参数,用于控制随机数生成器的种子。设置 random_state 可以确保每次运行代码时,数据的分割方式是一致的,这有助于复现结果。
可以用print(X_train.shape)这样的代码打印出训练集特征 X_train 的形状,通常形状信息会告诉我们特征矩阵的行数(样本数)和列数(特征数)
线性回归
1 2 3 4 5
| linreg=LinearRegression() linreg.fit(X_train,y_train) LinearRegression(copy_X=True,fit_intercept=True,n_jobs=1) print(linreg.intercept_) print(linreg.coef_)
|
linreg = LinearRegression(): 创建一个 LinearRegression 对象
linreg.fit(X_train, y_train): 使用训练数据集 X_train 和对应的标签 y_train 来训练(拟合)线性回归模型。
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False): 这是 LinearRegression 类的初始化参数,参数的含义如下:
copy_X=True: 在拟合数据前,是否复制数据矩阵X。如果设置为False,数据将直接修改而不保留原始数据。
fit_intercept=True: 是否计算截距。如果设置为False,模型将不会尝试计算截距。
n_jobs=1: 指定用于并行化的CPU核心数。1代表不使用并行化。
print(linreg.intercept_): 打印线性回归模型的截距。截距是线性模型
print(linreg.coef_): 打印线性回归模型的系数。系数是线性模型
预测和评价测度
1 2
| y_pred=linreg.predict(X_test) print(y_pred)
|
使用 predict 方法对测试集 X_test 中的数据进行预测。predict 方法会根据模型学习到的参数(截距和系数)来计算每个样本的预测标签值。
1 2 3 4 5 6 7 8 9 10 11
| mse = mean_squared_error(y_test, y_pred) print("Mean Squared Error:", mse)
mae = np.mean(np.absolute(y_test - y_pred)) print("Mean Absolute Error:", mae)
rmse = np.sqrt(mse) print("Root Mean Squared Error:", rmse)
r2 = r2_score(y_test, y_pred) print("R-squared:", r2)
|
计算MSE、RMSE、MAE、R方
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score
data=pd.read_excel('C:\\Users\\cyx94a\\Desktop\\Python\\data\\al6-1.xls') sns.pairplot(data,x_vars=['Q','PL','PF','PK'],y_vars='TC',height=5,aspect=0.6,kind='reg') plt.show()
X=data[['Q','PL','PF','PK']] y=data['TC']
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)
linreg=LinearRegression() linreg.fit(X_train,y_train) LinearRegression(copy_X=True,fit_intercept=True,n_jobs=1) print(linreg.intercept_) print(linreg.coef_)
y_pred=linreg.predict(X_test)
mse = mean_squared_error(y_test, y_pred) print("Mean Squared Error:", mse)
mae = np.mean(np.absolute(y_test - y_pred)) print("Mean Absolute Error:", mae)
rmse = np.sqrt(mse) print("Root Mean Squared Error:", rmse)
r2 = r2_score(y_test, y_pred) print("R-squared:", r2)
|