mape = (abs(y_predict - y_test) / y_test).mean()
时间: 2024-02-19 10:02:17 浏览: 73
这是一个机器学习中用来评估模型预测准确度的指标,MAPE(Mean Absolute Percentage Error)是指平均绝对百分比误差,用来衡量预测值与真实值偏差的程度。在这个公式中,y_predict是模型对测试集的预测值,y_test是测试集的真实值。MAPE的值越小,表示模型的预测精度越高。
相关问题
def try_different_method(model,f_): model.fit(x_train[f_],y_train) y_predict = model.predict(x_test[f_]) y_predict1 = model.predict(x_train[f_]) print('训练集评价指标:') print( 'MAE值为: ', '%.4f'%float(mean_absolute_error(y_train,y_predict1)),\ 'RMSE值为:',' %.4f'%float(np.sqrt(metrics.mean_squared_error(y_train, y_predict1))),\ 'MAPE值为:', '%.4f'%float(np.mean(abs((y_train- y_predict1)/y_train))),\ 'R方值为: ', '%.4f'%float(metrics.r2_score(y_train, y_predict1)))
这是一个用于评估机器学习模型性能的函数,其中参数model是一个已经实例化的机器学习模型,f_是用于训练和测试的特征向量。函数首先使用训练集(x_train和y_train)对模型进行训练,然后使用测试集(x_test)对模型进行预测,得到预测结果y_predict。接下来使用训练集对模型进行再次预测,得到预测结果y_predict1,然后计算训练集的评价指标,包括MAE、RMSE、MAPE和R方值,并打印输出这些指标。其中MAE、RMSE和MAPE用于衡量预测值与真实值之间的差异,R方值用于衡量模型的拟合程度。
df = pd.read_excel(file_name) data___=pd.read_excel(file_name)#取了一个应该不会重复的名字 data__ = data___.loc[:, ['经验要求', '文凭要求', '薪资待遇_平均月薪']]#把这里改成df # 对于分类变量,使用LabelEncoder转换 le = LabelEncoder() # 用了这四个指标预测 data__['经验要求'] = le.fit_transform(data__['经验要求']) data__['文凭要求'] = le.fit_transform(data__['文凭要求']) # data['公司性质'] = le.fit_transform(data['公司性质']) # data['规模'] = le.fit_transform(data['规模']) # 将数据分为特征X和目标y X = data__.drop('薪资待遇_平均月薪', axis=1) y = data__['薪资待遇_平均月薪'] # 将数据分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练线性回归模型 reg = LinearRegression().fit(X_train, y_train) # 使用模型进行预测 y_pred = reg.predict(X_test) data___['预测薪资待遇_平均月薪'] = reg.predict(X) # 计算均方误差 mse = mean_squared_error(y_test, y_pred) # 这个改成文件夹路径 data___.to_excel('深圳2023年求职信息预测.xlsx') del df['Unnamed: 0'] del df['公司性质_规模'] print(df.info) mape=np.mean(np.abs((y_test - y_pred)/y_test))*100 print("MAPE:",mape) # 展示预测结果 predictions = pd.DataFrame({'经验要求': X['经验要求'], '文凭要求': X['文凭要求'], '薪资待遇_平均月薪': y, '预测薪资待遇_平均月薪': data___['预测薪资待遇_平均月薪']}) print(predictions)
在看完你提供的代码后,我发现其中存在一些可以优化的地方,具体如下:
1. 在读取Excel文件时,建议使用`pd.ExcelFile`和`with`语句,这样可以更好地管理文件句柄并避免内存泄漏。
2. 在使用`LabelEncoder`时,建议使用`fit_transform`方法,这样可以同时进行训练和转换操作。
3. 在计算MAPE时,建议使用绝对误差的平均值除以真实值的平均值,这样可以更好地反映预测误差的大小。
4. 在输出DataFrame时,可以使用`to_csv`方法将数据保存为CSV格式文件,这样可以更好地与其他程序和系统进行交互。
5. 在删除DataFrame的列时,建议使用`drop`方法,并将`axis`参数设置为1,这样可以避免使用多次`del`语句。
下面是优化后的代码:
```
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import numpy as np
# 使用pd.ExcelFile和with语句读取Excel文件
with pd.ExcelFile(file_name) as xls:
df = pd.read_excel(xls)
data = pd.read_excel(xls)
# 只选择需要的列
data = data.loc[:, ['经验要求', '文凭要求', '薪资待遇_平均月薪']]
# 对分类变量进行编码
le = LabelEncoder()
data['经验要求'] = le.fit_transform(data['经验要求'])
data['文凭要求'] = le.fit_transform(data['文凭要求'])
# 将数据分为特征X和目标y
X = data.drop('薪资待遇_平均月薪', axis=1)
y = data['薪资待遇_平均月薪']
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练线性回归模型
reg = LinearRegression().fit(X_train, y_train)
# 使用模型进行预测
y_pred = reg.predict(X_test)
data['预测薪资待遇_平均月薪'] = reg.predict(X)
# 计算MAPE
mape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100
print("MAPE:", mape)
# 删除DataFrame的列
df = df.drop(['Unnamed: 0', '公司性质_规模'], axis=1)
# 保存预测结果为CSV文件
data.to_csv('深圳2023年求职信息预测.csv', index=False)
# 展示预测结果
predictions = pd.DataFrame({'经验要求': X['经验要求'], '文凭要求': X['文凭要求'], '薪资待遇_平均月薪': y, '预测薪资待遇_平均月薪': data['预测薪资待遇_平均月薪']})
print(predictions)
```
希望这些优化方案能够对你有所帮助!
阅读全文