机器学习之模型创建(一)
2018-12-31 05:25
267 查看
创建模型的过程
import sklearn.linear_model as lm
创建模型
model = lm.LinearRegression()
训练模型
model.fit(输入, 输出) # 通过梯度下降法计算模型参数
预测输出
model.predict(输入)->输出
输入是一个二维数组,每一行是一个样本,每一列是一个特征。
y = wo + w1x1 + w2x2 + … + wnxn
特征1 | 特征2 | ... | 特征n | |
---|---|---|---|---|
样本1 | x11 | x12 | ... | x1n |
样本2 | x21 | x22 | ... | x2n |
样本3 | x31 | x32 | ... | x3n |
代入模型后可以得到
y1
y2
…
ym
输出是一个一维数组,其中每个元素对应输入矩阵中的一行。
如何评价一个模型的好坏呢?
import sklearn.metrics as sm
这边我们使用一组数据
以下是从一个txt文件中读取的数据
4.94,4.37 -1.58,1.7 -4.45,1.88 -6.06,0.56 -1.22,2.23 -3.55,1.53 0.36,2.99 -3.24,0.48 1.31,2.76 2.17,3.99 2.94,3.25 -0.92,2.27 -0.91,2.0 1.24,4.75 1.56,3.52 -4.14,1.39 3.75,4.9 4.15,4.44 0.33,2.72 3.41,4.59 2.27,5.3 2.6,3.43 1.06,2.53 1.04,3.69 2.74,3.1 -0.71,2.72 -2.75,2.82 0.55,3.53 -3.45,1.77 1.09,4.61 2.47,4.24 -6.35,1.0 1.83,3.84 -0.68,2.42 -3.83,0.67 -2.03,1.07 3.13,3.19 0.92,4.21 4.02,5.24 3.89,3.94 -1.81,2.85 3.94,4.86 -2.0,1.31 0.54,3.99 0.78,2.92 2.15,4.72 2.55,3.83 -0.63,2.58 1.06,2.89 -0.36,1.99
接下来我们看代码
# -*- coding: utf-8 -*- from __future__ import unicode_literals import numpy as np import matplotlib.pyplot as mp import sklearn.linear_model as lm import sklearn.metrics as sm import pickle #采集数据 x,y = [],[] with open('./single.txt','r') as f: for line in f.readlines(): data = [float(substr) for substr in line.split(',')] x.append(data[:-1]) y.append(data[-1]) x = np.array(x) y = np.array(y) #创建模型,也就意味着选择了算法 model = lm.LinearRegression() #线性回归 #训练模型 model.fit(x,y) #根据输入预测输出 pred_y = model.predict(x) #打印每个样本的实际输出和预测输出 for true, pred in zip(y,pred_y): print(true,'----->',pred) mp.figure('Linear Regression', facecolor='lightgray') mp.title('Linear Regression', fontsize=20) mp.xlabel('x', fontsize=14) mp.ylabel('y', fontsize=14) mp.tick_params(labelsize=10) mp.grid(linestyle=':') mp.scatter(x, y, c='dodgerblue', alpha=0.75, s=60, label='Sample') #得到输入从小到大的索引值 sorted_indices = x.T[0].argsort() mp.plot(x[sorted_indices],pred_y[sorted_indices],c='orangered',label='Regression') mp.legend() mp.show()
如上图,我们得到一个线性回归模型
如何评价一个模型的好坏呢?
import sklearn.metrics as sm# 平均绝地值误差: 1/m * ∑|实际输出减去预测输出| 取绝地值 print(sm.mean_absolute_error(y,pred_y)) # 平均平方误差: SQRT(1/m * ∑(实际输出减去预测输出)^2) print(sm.mean_squared_error(y,pred_y)) # 中位数绝对值误差:MEDIAN(|实际输出减去预测输出|) print(sm.median_absolute_error(y,pred_y)) # R2得分 误差越接近于正无穷,r2值越接近于0,误差越接近0,r2值越接近1(相当于做了一次归一化) print(sm.r2_score(y,pred_y))
可以得到如下数据
0.5482812185435971 0.43606903238180605 0.5356597030142565 0.736263899848181
模型的保存和加载
import pickle
pickle.dump(内存对象, 磁盘文件) # 保存模型,把内存对象放到磁盘文件中
pickle.load(磁盘文件)->内存对象 # 加载模型,读取磁盘文件中的内存对象
import pickle #将训练好的学习模型保存到磁盘文件中 with open('./linear.pkl','wb') as f: pickle.dump(model, f) #从磁盘文件中加载模型对象 with open('./linear.pkl','rb') as f: model = pickle.load(f)
重复上述代码,更改创建为读取,看看是否能得到相同的图形。
相关文章推荐
- 创建一个容器化的机器学习模型 | Linux 中国
- 为你的机器学习模型创建一个API服务
- 创建一个容器化的机器学习模型
- 手把手 | 如何在你的iPhone上建立第一个机器学习模型(Apple最新CoreML框架入门)
- 浅谈Java利用表格模型创建表格[原创]_java_脚本之家
- Cakephp 创建无模型的Controller
- 使用Microsoft R进行机器学习和模型发布(1)
- 【机器学习】Tensorflow概率编程:线性混合模型
- Python机器学习实践例子&&Kagle入门 Titanic乘客生存预测模型分析(利用决策树)
- PowerDesigner15.1创建模型及生成带中文注释
- 公开课机器学习笔记(7)Softmax回归模型
- (016):[演练]创建简单对象模型和LINQ查询(C#)
- 【机器学习】Sklearn 调试模型
- Andrew NG机器学习课程笔记系列之——机器学习之神经网络模型-上(Neural Networks: Representation)
- 机器学习笔记(III)模型评估与选择(II)
- 又失眠?陪你做个机器学习模型,看看“睡个好觉”背后有什么秘诀
- 机器学习:时间序列模型
- Model First:创建实体数据模型(ADO.NET 实体数据模型)
- 周志华《机器学习》笔记:第2章 模型估计与选择
- 机器学习模型评价指标