# The Normal Equation


import numpy as np
X = 2 * np.random.rand(100,1) #np.random.rand,通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。
y = 4 + 3 * X + np.random.randn(100,1)
#np.random.rand通过本函数可以返回一个或一组服从标准正态分布的随机样本值。
1)当函数括号内没有参数时,则返回一个浮点数;
2)当函数括号内有一个参数时,则返回秩为1的数组,不能表示向量和矩阵;
3)当函数括号内有两个及以上参数时,则返回对应维度的数组,能表示向量或矩阵;
4)np.random.standard_normal()函数与np.random.randn()类似,但是np.random.standard_normal()
的输入参数为元组(tuple).
5)np.random.randn()的输入通常为整数,但是如果为浮点数,则会自动直接截断转换为整数。

#Compute normalization


X_b = np.c_[np.ones((100,1)),X] # add x0 to each instance
#np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等。
#np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
#np.linalg.inv():矩阵求逆print('theta_best',theta_best)'''
theta_best [[4.10903353][2.9317255 ]]
'''#make predictions using theta hat
X_new = np.array([[0],[2]])
print(X_new)
'''
[[0][2]]
'''
X_new_b = np.c_[np.ones((2,1)),X_new]
print(X_new_b)
'''
[[1. 0.][1. 2.]]
'''y_predict = X_new_b.dot(theta_best)
print('y_predict',y_predict)
'''
[[3.91742296][9.94607488]]
'''
plt the model predictions
plt.plot(X_new,y_predict,'r-')
plt.plot(X,y,'b.')
plt.axis([0,2,0,15])
plt.show()
#using Scikit-Learn
from sklearn.linear_model import LinearRegressionlin_reg = LinearRegression()
lin_reg.fit(X,y)
print(lin_reg.intercept_,lin_reg.coef_)
#[3.83383173] [[3.16072489]]
print(lin_reg.predict(X_new))
#[[3.95597016]
#[9.85979796]]theta_best_svd,residuals,rank,s = np.linalg.lstsq(X_b,y, rcond=1e-6)
#lstsq:least squares 是 LeaST SQuare (最小二乘)的意思。我们常用最小二乘法来求解超定线性方程组。https://www.zhihu.com/question/40540185
'''
c=rcond(A)
返回矩阵A的1-范数可逆的条件数。对于好条件矩阵A,rcond(A)是接近1的数。对于差条件矩阵A,rcond(A)是接近0的数。和cond相比,rcond(A)在对估计矩阵条件数上更有效率,但更不可靠。
'''
print(theta_best_svd)
#[[4.07650022]
#[3.03760046]]#calculate Pesudoinverse of X(Moore-Penrose inverse)
print('Pesudoinverse',np.linalg.pinv(X_b).dot(y))
#Pesudoinverse [[4.20901209]
# [2.81408334]]
伪逆矩阵更加常用的定义(基于SVD奇异值分解):SVD公式:伪逆矩阵公式:这个公式要注意的是中间的的求法。因为是一个对角线矩阵,但又不一定是方阵,所以计算它的伪逆矩阵的步骤是特殊又简单的:将对角线上的元素取倒数再将整个矩阵转置一次
#Gradient Descent
#Batch Gradient Descent

eta = 0.1 #learning rate
n_interations = 1000
m = 100theta = np.random.randn(2,1) #random initializationfor iteration in range(n_interations):gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y) #euqation 4-6theta = theta - eta * gradientsprint('theta',theta)
#theta [[3.61861605]
#[3.35291414]]
#Stochastic Gradient Desent
#using SGD
from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(max_iter=1000,tol=1e-3,penalty=None,eta0=0.1)
sgd_reg.fit(X,y.ravel())
print(sgd_reg.intercept_,sgd_reg.coef_)
#[4.03587962] [3.04749379]#Polynomial Regress
m = 100
X = 6 * np.random.randn(m,1)
y = 0.5 * X**2 + X +2 + np.random.randn(m,1)#use Sci-kit
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
print('X[0]',X[0])
#X[0] [-8.77213649]
print(X_poly)#fit a LinearRegression Model to this extended training data
lin_reg = LinearRegression()
lin_reg.fit(X_poly,y)
print(lin_reg.intercept_,lin_reg.coef_)
#[2.22340435] [[1.03677436 0.49366961]]#learning curves: plots of the model's performance on the training set and the validation set as a function of the training set size(or training iteraion)
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_splitdef plot_lerarning_curves(model,X,y):X_train, X_val,y_train,y_val = train_test_split(X,y,test_size = 0.2)train_errors,val_errors = [],[]for m in range(1,len(X_train)):model.fit(X_train[:m],y_train[:m])y_train_predict = model.predict(X_train[:m])y_val_prdict = model.predict(X_val)train_errors.append(mean_squared_error(y_train[:m],y_train_predict))val_errors.append(mean_squared_error(y_val,y_val_prdict))plt.plot(np.sqrt(train_errors),'r-+',linewidth=2,label='train')plt.plot(np.sqrt(val_errors), 'b-', linewidth=2, label='prediction')plt.show()lin_reg = LinearRegression()
plot_lerarning_curves(lin_reg,X,y)#leraning curves of 10th degreefrom sklearn.pipeline import Pipelinepolynomial_regression = Pipeline([('poly_features',PolynomialFeatures(degree=10,include_bias=False)),('lin_reg',LinearRegression()),
])#plot_lerarning_curves(polynomial_regression,X,y)

Chapter4:Traing Model相关推荐

  1. 走向.NET架构设计—第四章—业务层分层架构(中篇)

    走向.NET架构设计-第四章-业务层分层架构(中篇) 前言: 在上一篇文章中,我们讨论了两种组织业务逻辑的模式:Transaction Script和Active Record.在本篇中开始讲述Dom ...

  2. 协同过滤推荐之基于模型协同过滤

    目录 (1)基于模型协同过滤的核心思想 (2)矩阵分解详解 (3)矩阵分解图例及数据演化过程 (4)SVD算法之交替最小二乘(ALS)详解 (5)基于SVD算法之交替最小二乘(ALS)完成推荐开发 几 ...

  3. Chapter4.4:综合实例

    该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识. 自动控制理论基础相关链接:https://blog.c ...

  4. 机器学习入门系列05,Classification: Probabilistic Generative Model(分类:概率生成模型)

    Gitbook整理地址: Classification 分类 分类要找一个function,输入就是对象 xx ,输出是这个对象属于n个类别的哪一个. 比如信用评分 输入:收入,储蓄,行业,年龄,金融 ...

  5. Tesla Model汽车架构与FSD供应链

    Tesla Model汽车架构与FSD供应链 特斯拉Model 3和Model Y平台架构 特斯拉model Y和Model 3 怎么做平台架构. 通过特斯拉透露的信息,Model 3 和 model ...

  6. 特斯拉Tesla Model 3整体架构解析(上)

    特斯拉Tesla Model 3整体架构解析(上) 一辆特斯拉 Model 3型车在硬件改造后解体 Sensors for ADAS applications 特斯拉 Model 3型设计的传感器组件 ...

  7. OC实用转换model的工具

    OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点 ...

  8. 一起学WP7 XNA游戏开发(八. 让3d model动起来)

    如何让3d model动起来,其实就是要给model的bone设置动作,这样整个model就会动起来了. 一.获取Bones 在fbx文件中可以看到所有bones的名称,这样就可以通过名称来获取到bo ...

  9. PyTorch加载模型model.load_state_dict()问题,Unexpected key(s) in state_dict: “module.features..,Expected .

    希望将训练好的模型加载到新的网络上.如上面题目所描述的,PyTorch在加载之前保存的模型参数的时候,遇到了问题. Unexpected key(s) in state_dict: "mod ...

最新文章

  1. 1480. 一维数组的动态和
  2. Mac卸载mysql并安装mysql升级到8.0.13版本
  3. halcon基本语法和常用算法
  4. OpenStack精华问答 | OpenStack是操作系统?
  5. AE安装部署以及监测ArcEngine runtime 9.3是否安装
  6. QT5开发及实例学习之十八显示Qt5 SVG格式图片
  7. Q96:PT(2):纹理的仿射变换(Textures And Transformations)
  8. python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列...
  9. oracle 10g oci.dll 下载,Oracle 11g oci.dll下载
  10. 神来之笔--图解JVM内存分配及对象存储
  11. java生成不重复8位数字_如何生成8位随机不重复的数字编号
  12. 如何提升产品经理的综合素质?
  13. 地址总线是单向还是双向_大余双向钢塑土工格栅%/*的作用泰安恒大工程材料-老友网...
  14. 面试官:什么是静态代理?什么是动态代理?注解、反射你会吗?
  15. 大聪明教你学Java | 实现邮件发送(以163邮箱向QQ邮箱发送邮件为例)
  16. 大数据----2.基础环境搭建
  17. C语言练习题:计算一元二次方程!!
  18. 塔尔斯基学派代表作—模型论(教科书)
  19. java学生管理系统(swing) (没用数据库,附源码)
  20. 城市交通应急广播系统方案

热门文章

  1. 计算机语言学与机器翻译,论计算机语言学之中机器翻译发展现状
  2. 使用Easypoi实现Excel导入导出
  3. unity--2018版本terrain
  4. 智慧工厂高精度人员定位解决方案
  5. Java的对象关系映射
  6. Linux Shell if判断
  7. 数组--如何通过【二维数组+稀疏数组】实现五子棋盘,并且保存记忆功能?
  8. 城市大脑独树一帜,阿里云比腾讯云华为云厉害在哪?
  9. win10计算机里文件夹怎么删除文件,Win10开始菜单里的文件夹怎么删除,删除开始菜单文件夹教程方法...
  10. 音视频基础——音频基础知识