将未知问题转化为已知模型能解决的问题
一、建模五部曲
确定场景类型-定义损失函数-特征提取-确定模型形式-评估模型
二、具体步骤
import os
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import linear_model
1、读取数据
def read_data(path):
data=pd.read_csv(path)
return data
2、训练模型
def train_damodel(x,y):
"""
参数 x:DataFrame,特征
y:Dataframe,标签
返回 model :LinearRegression ,训练好的模型。
"""
#创建一个线性回归模型
model =linear_model.LinearRegression()
#训练模型,估计模型参数
model.fit(x,y)
return model
3、模型评估
def evaluate_model(model,x,y):
"""
计算模型的均方差和决定系数
参数:
model:LinearRegression,训练完的线性模型
x,Dataframe,特征
y,DataFrame,标签
返回:
mse: np.float ,均方差 mean squared error
score: np.float,决定系数,R²
a: np.float,系数
b: np.float,截距
"""
mse = np.mean(
(model.predict(x)-y)**2)
score = model.score(x,y)
a = model.coef_
b = model.intercept_
return mse, score ,a ,b
4、可视化预测效果
def visualize_model(model,x,y):
"""
模型预测效果可视化
"""
#创建一个图形框
fig=plt.figure(figsize=(8,6),dpi=80)
#在画框中画图
ax=fig.add_subplot(111)
ax.set_xlabel('特征')
ax.set_ylabel('标签')
#画出原始数据散点图,蓝色区分
ax.scatter(x,y,color='b')
#画出预测值,红色区分,图例标识模型公式
ax.plot(x,model.predict(x),color='r',
labele=u'$y = %.3fx + %.3f' % (a,b))
plt.legend(shadow=True)
plt.show()
5、封装运行模型
def run_model(data):
"""
参数: data,DataFrame,训练数据
"""
#定义特征
features = ["x"]
label = ["y"]
#产生并训练模型
model=train_model(data[features],data[label])
#评价模型效果
mse,score,a,b=evaluate_model(model,data[features],data[label])
print('MSE的值为{}。'.format(mse))
print('R²的值为{}。'.format(score))
print('系数为{}。'.format(a))
print('截距为{}。'.format(b))
#图形可视化
visualize_model(model,data[features],data[label])
6、运行脚本并输出
if __name__ = "__main__":
home_path = os.path.abspath(".")
if os.name == 'nt':
data_path ='{}\\sample_csv'.format(home_path)
else:
data_path ='{}/sample_csv'.format(home_path)
data=read_data(data_path)
run_model
注意事项
1、data[[‘x’]]和data.x 的区别
data[[‘x’]]是多行1列的array,和data.x的区别:data[[‘x’]]是多行1列的array,data.x是1行多列的 array>
2、np.array 转化成DataFrame 需注意花括号
pd.DataFrame({“x”:x,“y”:y})
此处双引号内的x,y为列名称
3、获取当前工作空间的绝对地址
import os
print(os.path.abspath(".")) #当前目录的绝对路径(%pwd)
print(os.path.abspath(r"…")) #上级目录的绝对路径
4、对于linear_model.LinearRegression中的参数为
系数:model.coef_,
截距:model.intercept_
5、此处的模型训练数据和验证数据都是使用的x,在实际应用中应注意将原始数据拆分为训练集和验证集,并在相应的模块中修改。
四、小结
1、初步学习使用Python训练模型,了解了建模的基本步骤及形式,但是不够熟练还需要多加练习。
2、将程序模块化,思路更加清晰。
3、编译模块时,注释要清楚,便于有阅读。
4、还应加深对模型的深度学习,实际应用中还需要更多的内容支持。