admin管理员组

文章数量:1531667

神经网络三大基本框架

Pytorch、TensorFlow、Keras

 

【波士顿房价问题】:

dir(#数据库名称)

查看数据库中都有什么属性

#数据库名称[#属性名称]

查看属性中的具体数据内容

 

pandas:panel data set 即面板数据;可以理解为Excel,但比Excel更方便编程

1:correlation,salient feature显著特征

significant(salient)feature:决定因变量最重要的特征称为显著特征

 

pandas中有一个.corr() 函数,用于衡量两组变量的相关性,∈[-1,1]

-1为负相关,1为正相关。自变量为CRIM,ZN,INDUS等等,因变量为price。

可以看到CRIM对price的影响为-0.388305,CRIM与price的相关性为负数:代表CRIM越小,房价越高(即呈负相关);

RM与price的相关性为0.695360:正相关,且最绝对值接近于1,代表这个特征较为显著;

(#dataframe为用pandas创建的一个表格)

 

【问题】:如何根据房屋里卧室的数量来估计房子的面积呢?

方法一:建立一个字典来索引,但是字典里没有的数据就会存在索引不到的问题。

X_rm = dataframe['RM'].values

Y = dataframe['price'].values

rm_to_price = {r : y for r , y in zip(X_rm , Y)} #一一映射创建字典

 

方法二:字典的优化,当找不到数据时,找一个与目标数据相接近的历史数据

Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。

def find_price_by_similar(history_price, query_x, topn=3)
#输入history_price为字典,query_x为想要查询的rm(房间数),topn为最接近的三个值

    most_similar_items = sorted(history_price.items(), key = lambda e : (e[0] - query_x)**2[:topn]

#匿名函数为:根据欲索引元素求字典元素[0]的平方差,即求出与索引最接近的topn个索引,输出仍为索引:索引值的形式

     most_similar_prices = [price for rm, price in most_similar_items]

#rm : price for rm, price in most_similar_items创建price为索引值(因变量),rm为索引(自变量)的字典;因为history_price字典中自有一套对映射关系,price也对应着history_price中因变量

#区别于上面的创建字典,price for rm, price in most_similar_items,只取price的值

    average_prices = np.mean(most_similar_prices)

    return average_prices #返回最接近的topn个价格的平均值


#topn的意思是获得最接近的topn个数据

#sorted是排序函数,根据key进行从小到大排序

find_price_by_similar(rm_to_price, 4)
#rm_to_price为从数据集读出整理成的字典

 

MIT计算机系一句名言:代码是给人看的,偶尔运行一下

2:K-Neighbor-Nearest => KNN 找到K个最近的邻居,在数据量比较大的时候,这种方法比较低效(find_price_by_similar其实就是knn算法的原理)

缺点:knn类似从书中一个个去找数据

Lazy Learning:当内容很多时,需要花费很多时间

机器学习:通过我们现有的知识(观察到的数据),去解决我们没见过的问题(预测分类)

 

3:通过拟合函数关系,输入x找到y

一个更有效的学习方法

如果我们能够找到x和y之间的函数关系,我们每次要计算得时候,输入给这个函数就能直接获得预测值 =>拟合函数关系

目标:找到一组k和b使得拟合效果最好。

4:判断拟合效果Loss

什么叫做拟合效果好?=>Loss函数(判断标准)

MSE(Mean Squared Error):

                                                                     

越接近于0,效果越好。

此处的为kx+b,求k和b使得拟合效果最好。

①直接用微积分的方法做计算(最小二乘法取极值),缺点:预测函数太复杂了,没法求极值;

5:蒙特卡洛模拟获得最优的k和b

②用随机迭代的方法获得最优值(Random Approach/蒙特卡洛模拟),随机取k,b代入求得,缺点:前面更新很快,到后面更新越来越慢;(没有方向,瞎找)

、、

6:梯度下降获得最优的k和b

③梯度下降gradient descent(我们希望更新很快,一直在更新,有方向的【supervisor】)

通过计算梯度,我们就可以知道k的移动方向,应该让k向左走而不是向右走(或k向右走而不是向左走),也可以知道什么时候会到最低点(梯度为0的地方)。

梯度是loss对k或b的偏导,目的是为了找到使得loss最小的k和b。

 

 

 

本文标签: 神经网络从零开始