详解:如何用Python实现机器学习算法(1)

2017-12-25 Lawlite AI科技大本营

Python是实现机器学习的最主要语言,下面详细介绍各类相关算法。 目录 一、线性回归 1、代价函数 2、梯度下降算法 3、均值归一化 4、最终运行结果 5、使用scikit-learn库中的线性模型实

Python是实现机器学习的最主要语言,下面详细介绍各类相关算法。这些算法同样可以用于医学中

目录

  • 一、线性回归

    • 1、代价函数

    • 2、梯度下降算法

    • 3、均值归一化

    • 4、最终运行结果

    • 5、使用scikit-learn库中的线性模型实现

  • 二、逻辑回归

    • 1、代价函数

    • 2、梯度

    • 3、正则化

    • 4、S型函数(即)

    • 5、映射为多项式

    • 6、使用的优化方法

    • 7、运行结果

    • 8、使用scikit-learn库中的逻辑回归模型实现

  • 逻辑回归_手写数字识别_OneVsAll

    • 1、随机显示100个数字

    • 2、OneVsAll

    • 3、手写数字识别

    • 4、预测

    • 5、运行结果

    • 6、使用scikit-learn库中的逻辑回归模型实现

  • 三、BP神经网络

    • 1、神经网络model

    • 2、代价函数

    • 3、正则化

    • 4、反向传播BP

    • 5、BP可以求梯度的原因

    • 6、梯度检查

    • 7、权重的随机初始化

    • 8、预测

    • 9、输出结果

  • 四、SVM支持向量机

    • 1、代价函数

    • 2、Large Margin

    • 3、SVM Kernel(核函数)

    • 4、使用中的模型代码

    • 5、运行结果

  • 五、K-Means聚类算法

    • 1、聚类过程

    • 2、目标函数

    • 3、聚类中心的选择

    • 4、聚类个数K的选择

    • 5、应用——图片压缩

    • 6、使用scikit-learn库中的线性模型实现聚类

    • 7、运行结果

  • 六、PCA主成分分析(降维)

    • 1、用处

    • 2、2D-->1D,nD-->kD

    • 3、主成分分析PCA与线性回归的区别

    • 4、PCA降维过程

    • 5、数据恢复

    • 6、主成分个数的选择(即要降的维度)

    • 7、使用建议

    • 8、运行结果

    • 9、使用scikit-learn库中的PCA实现降维

  • 七、异常检测 Anomaly Detection

    • 1、高斯分布(正态分布)

    • 2、异常检测算法

    • 3、评价的好坏,以及的选取

    • 4、选择使用什么样的feature(单元高斯分布)

    • 5、多元高斯分布

    • 6、单元和多元高斯分布特点

    • 7、程序运行结果

一、线性回归

源码

全部代码下载

1、代价函数

其中: 

下面就是要求出theta,使代价最小,即代表我们拟合出来的方程距离真实值最近

共有m条数据,其中代表我们要拟合出来的方程到真实值距离的平方,平方的原因是因为可能有负值,正负可能会抵消

前面有系数2的原因是下面求梯度是对每个变量求偏导,2可以消去

实现代码:

# 计算代价函数

def computerCost(X,y,theta):

    m = len(y)

    J = 0

    

    J = (np.transpose(X*theta-y))*(X*theta-y)/(2*m) #计算代价J

    return J

注意这里的X是真实数据前加了一列1,因为有theta(0)

2、梯度下降算法


代价函数对求偏导得到:

所以对theta的更新可以写为:

其中为学习速率,控制梯度下降的速度,一般取0.01,0.03,0.1,0.3.....

为什么梯度下降可以逐步减小代价函数?

假设函数f(x)

泰勒展开:f(x+△x)=f(x)+f'(x)*△x+o(△x),

令:△x=-α*f'(x) ,即负梯度方向乘以一个很小的步长α

将△x代入泰勒展开式中:f(x+x)=f(x)-α*[f'(x)]²+o(△x)

可以看出,α是取得很小的正数,[f'(x)]²也是正数,所以可以得出:f(x+△x)<=f(x)

所以沿着负梯度放下,函数在减小,多维情况一样。

# 梯度下降算法

def gradientDescent(X,y,theta,alpha,num_iters):

    m = len(y)      

    n = len(theta)

    

    temp = np.matrix(np.zeros((n,num_iters)))   # 暂存每次迭代计算的theta,转化为矩阵形式

    

    J_history = np.zeros((num_iters,1)) #记录每次迭代计算的代价值

    

    for i in range(num_iters):  # 遍历迭代次数    

        h = np.dot(X,theta)     # 计算内积,matrix可以直接乘

        temp[:,i] = theta - ((alpha/m)*(np.dot(np.transpose(X),h-y)))   #梯度的计算

        theta = temp[:,i]

        J_history[i] = computerCost(X,y,theta)      #调用计算代价函数

        print '.',      

    return theta,J_history  

3、均值归一化

目的是使数据都缩放到一个范围内,便于使用梯度下降算法

其中  为所有此feture数据的平均值

可以是最大值-最小值,也可以是这个feature对应的数据的标准差

实现代码:

# 归一化feature

def featureNormaliza(X):

    X_norm = np.array(X)            #将X转化为numpy数组对象,才可以进行矩阵的运算

    #定义所需变量

    mu = np.zeros((1,X.shape[1]))   

    sigma = np.zeros((1,X.shape[1]))

    

    mu = np.mean(X_norm,0)          # 求每一列的平均值(0指定为列,1代表行)

    sigma = np.std(X_norm,0)        # 求每一列的标准差

    for i in range(X.shape[1]):     # 遍历列

        X_norm[:,i] = (X_norm[:,i]-mu[i])/sigma[i]  # 归一化

    

    return X_norm,mu,sigma

注意预测的时候也需要均值归一化数据

4、最终运行结果

代价随迭代次数的变化


5、使用scikit-learn库中的线性模型实现

下载程序包

导入包

from sklearn import linear_model 

from sklearn.preprocessing import StandardScaler    #引入缩放的包 

归一化

# 归一化操作    

scaler = StandardScaler()        

scaler.fit(X)     

x_train = scaler.transform(X)     

x_test = scaler.transform(np.array([1650,3])) 

线性模型拟合

 # 线性模型拟合     

model = linear_model.LinearRegression()     

model.fit(x_train, y) 

预测

#预测结果     

result = model.predict(x_test) 

详解:如何用Python实现机器学习算法(2)

版权声明:
本网站所有内容来源注明为“梅斯医学”或“MedSci原创”的文字、图片和音视频资料,版权均属于梅斯医学所有。非经授权,任何媒体、网站或个人不得转载,授权转载时须注明来源为“梅斯医学”。其它来源的文章系转载文章,或“梅斯号”自媒体发布的文章,仅系出于传递更多信息之目的,本站仅负责审核内容合规,其内容不代表本站立场,本站不负责内容的准确性和版权。如果存在侵权、或不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
在此留言
评论区 (1)
#插入话题
  1. [GetPortalCommentsPageByObjectIdResponse(id=1583096, encodeId=b2ae15830962a, content=<a href='/topic/show?id=f6e1611840d' target=_blank style='color:#2F92EE;'>#机器#</a>, beContent=null, objectType=article, channel=null, level=null, likeNumber=37, replyNumber=0, topicName=null, topicId=null, topicList=[TopicDto(id=61184, encryptionId=f6e1611840d, topicName=机器)], attachment=null, authenticateStatus=null, createdAvatar=null, createdBy=13dc16973127, createdName=ms6279672939590805, createdTime=Wed Dec 27 08:58:00 CST 2017, time=2017-12-27, status=1, ipAttribution=)]

相关资讯

CIRC RES:机器vs传统心血管危险评分

机器学习(Machine Learning, ML)是一门多领域交叉学科,可能有助于评估心血管危险因素,从而预测患者的预后。近日,在国际心血管权威杂志Circulation research上发表了一篇旨在评估机器学习-随机生存林(RF)与传统的心血管危险评分相比的特点的研究。本研究纳入了动脉粥样硬化的多种族研究(MESA)中的研究对象,随访12年,评估其心血管结局。最终,本研究纳入了6814名研

Lancet子刊:机器学习为临床研究阴性结果“平反”(Look AHEAD研究)

2012年,著名的Look AHEAD(糖尿病健康行动)临床试验因为阴性结果而被提前终止,这个结果曾经令业内人士大跌眼镜。不过根据最近发表在 The Lancet Diabetes & Endocrinology(《柳叶刀糖尿病和内分泌学》)的研究成果,通过采用机器学习方法进行分析后,当年被提前终止的阴性结果Look AHEAD可以“平反”了。西奈山伊坎医学院全球卫生研究所的数据科学研究人

麻省理工学院借助机器学习改进患者护理条件

麻省理工学院的计算机科学和人工智能实验室采用包括电子健康数据记录等多种类型的医疗数据以预测医疗情况。两个团队分别创建了“ICU干预”和“EHR模型迁移”机器学习方法,致力于改进患者护理条件。

Radiology:人工智能新科技给出答案:到底哪些乳腺高危病变最终将发展为乳腺癌?

机器学习(Machine Learning, ML)是一门多领域交叉学科,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。乳腺高危病变是一组临床、病理学和生物学上的异质性疾病,诊断之后乳腺癌发生的危险性增加,但危险程度和水平各异,临床意义与干预策略也不同。

Sci Rep:机器学习技术可以利用超宽域眼底图像诊断视网膜脱离!

日本Tsukazaki医院眼科系的Ohsugi H近日在Sci Rep杂志发表了一篇文章,题目为"Accuracy of deep learning, a machine-learning technology, using ultra-wide-field fundus ophthalmoscopy for detecting rhegmatogenous retinal detachment"

Gait & Posture:机器学习建模助力心理研究-3D步态与自尊测量

人类的非语言行为,如面部表情、姿势、步态等,常常可以体现出心理特征。使用非语言行为线索测量心理特征的主要障碍在于行为量化及其心理特征识别。随着智能设备不断推陈出新和模式识别技术的发展,使用机器学习建模实现自动预测已经成为可能。