小白带你学习机器学习基础
机器学习的主要任务
- 分类:
- 回归
大多数监督学习是通过训练和预测2个步骤,训练是需要使用训练样本,每个训练样本包含一组特征和标注,然后使用特定方式生成一个模型。预测解决,模型根据输入的特征输出一个对应的值,根据模型输出类型差异可以将监督学习分为分类和回归。
分类是机器学习中4经典的问题,
贝叶斯模型是简单的学习模型。最朴素的分类模型和最容易理解的模型是决策树模型,如一个人根据天气、温度、风况气压是否决定去钓鱼就是钓鱼的决策树。决策树比较好理解。
定义LogisticClassfier,基于Logistic回归分类器
from numpy import *
import pickle
class LogisticClassfier:
def __init__(self):
weights=1.0
#train
def train(self):
pass
def predict(self,x):
y=sum(x * self.weights)
prob= LogisticClassfier.sigmoid(y)
if prob > 0.5:
return 1.0
return 0.0
def dump(self,modelFileName):
params=dict()
params['weights']=self.weights
#save
model={
'params':params,
}
modelFile=open(modelFileName,'wb')
pickle.dump(model, modelFile,2)
modelFile.close()
def load(self,modelFileName):
modelFile=open(modelFileName,'rb')
model=pickle.load(modelFile)
params=model['params']
self.weights=params['weights']
modelFile.close()
@staticmethod
def sigmoid(inX):
return 1.0/(1+exp(-inX))
if __name__ == '__main__':
classfier=LogisticClassfier()
classfier.load('horse.model')
#read
frTest=open('data/horseColicTest.txt')
#init
errorCount=0
numTestVector=0.0
for line in frTest.readlines():
numTestVector+=1.0
currLine=line.strip().split('\t')
#
lineArr=[]
for i in range(21):
lineArr.append(float(currLine[i]))
#pre
predictResult=classfier.predict(array(lineArr))
isHorselable=currLine[21]
#
if int(predictResult)!=int(isHorselable):
errorCount+=1
errorRate=errorCount / numTestVector
print("错误率:%f",(float(errorRate)))
特征向量和模型的权重参数向量点乘,然后求和,计算输入线性回归函数,接着调用sigmoid函数计算激活值,如果激活概率>0.5,表示激活,返回1,如果激活概率小于等于0.5 返回0,未激活。
人工神经网络
概念:人工神经网络 (Artificial Neural Network ANN) 是一种模仿生物神经网络的结构和功能的数学模型或者计算模型。
典型的人工神经网络的3个部分组成
1)结构
指定网络变量和他们的拓扑关系
2)激励函数
大部分神经网络模型具有一个短时间的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。
3)学习规则
学习规则指定了网络中的权重如何随着时间推进而调整。