前些天在上学了一期的机器学习课程,初步了解了机器学习中的神经网络算法(有点复杂,还需要时间继续学习)
作为一个人工智能和机器学习的初学者,感觉自己还是一个菜鸟,才刚开始入门。但是我发现自己对这块很感兴趣,就一直都有了解这方面的知识。我希望自己研究生的时候可以尝试从事人工智能、机器学习或者大数据方面的研究,这是属于未来的事业。
下面分享一下学到的简单神经网络算法:
因为简单,所以它只有一层。但其实内部原理是极其复杂的。神经网络算法主要是模仿人类大脑及其思维方式的一个算法,有点属于仿生学的范畴。生物电流通过在神经元及突触上的层层传导,从而产生思维,进而引发一系列有目的性的行动。它对近年来的人工智能和机器学习的飞速发展产生了深远的影响!
系列代码如下:
data.py
import pandas as pd
file="/home/zq/PythonProjects/Neural_Networks/Test/iris.data.csv"
df = pd.read_csv(file, header=None)
df.head(1)
iris.data.csv
test.py
import numpy as np
class Perceptron(object):
"""
eta:学习率,处于0和1之间
n_iter:权重向量的训练次数
w_:神经分叉权重向量
errors_:用于记录神经元判断出错次数
"""
def __init__(self, eta=0.01, n_iter=10):
self.eta = eta;
self.n_iter=n_iter;
pass
def fit(self, X, y):
"""
输入训练次数,培训神经元,X输入样本向量,y对应样本分类
X:shape[n_samples,n_features]
X:[[1,2,3],[4,5,6]],n_samples=2,n_features=3;
y:[1,-1]
初始化权重向量为0
加一是因为w0,也就是步调函数阈值
"""
self.w_=np.zero(1+X.shape[1]);
self.errors_=[]
for _ in range(self.n_iter) :
error=0
for xi,target in zip(X,y):
"""
update=η*(y-y')
"""
update = self.eta * (target - self.predict(xi))
"""
xi是一个向量
"""
self.w_[1:] += update*xi
self.w_[0]+=update;
error += int(update != 0.0)
self.errors_.append(error)
pass
pass
def net_input(self ,X) :
"""
z=w0*1+w1*X1+w2*X2......wn*Xn
"""
return np.dot(X,self.w_[1:])+self.w_[0]
pass
def predict(self,X) :
return np.where(self.net_input(X)>=0.0,1,-1)
pass
后面的可视化过程就不详细讲了,要用到一系列的工具和python模块,比如matplotlib.pyplot
这只是一层的神经网络算法,通过大量的数据喂给这个基础模型,在后期可以产生一定的预测结果,效果较为乐观。
通过对人工智能和机器学习的初步学习,首先python这个强大的工具一定要掌握透彻,其次最重要的是要有很好的数学基础,比如高数,概率论,统计学基础等,因为这个领域涉及到大量的数学公式的推导和证明。活跃的数学思维和专业思维是学好AI的关键。
作为这个领域的初学者,还有很多地方不懂,上文都是个人见解,如有错误和不足,还希望大家多多指正。未来属于AI和Big Data!