机器学习习题3.3

             西瓜3.0a数据集如下:

密度	含糖量	好瓜
0.6792	0.46	1
0.774	0.376	1
0.634	0.264	1
0.608	0.318	1
0.556	0.215	1
0.403	0.237	1
0.481	0.149	1
0.437	0.211	1
0.666	0.091	0
0.243	0.267	0
0.245	0.057	0
0.343	0.099	0
0.639	0.161	0
0.657	0.198	0
0.36	0.37	0
0.593	0.042	0
0.719	0.103	0

           由‘机器学习第三章’中的推导公式,将其转换为代码如下

           将p_{1}(x^{'}_{i};\beta )转化为如下代码:

def P1(x_data,beta):
    per1=np.exp(np.dot(beta.T,x_data))/(1+np.exp(np.dot(beta.T,x_data)))
    return per1

           将(\frac{\partial^2 l(\beta )}{\partial \beta \partial \beta ^{T}})^{-1}\frac{\partial l(\beta )}{\partial \beta}转化如下:

def derivative(x_data,y_data,beta):
    sum1 = 0
    sum2 = 0
    for x,y in zip(x_data,y_data):
        xi = np.append(x,1)
        sum1 -=xi*(y-P1(xi,beta))#(3.30)
        sum2 +=xi*xi.T*P1(xi,beta)*(1-P1(xi,beta)) #(3.31)
        #print(sum1/sum2)
    return sum1/sum2

           将最后的牛顿算法进行转换

def Newton_method(x_data,y_data,iterations,alpha=1):
    print('start')
    w = np.zeros(x_data.shape[1])
    b = 0
    old_beta=beta = np.append(w,b)
    
    for i in range(iterations):
        beta = old_beta- alpha*derivative(x_data,y_data,old_beta) #(3.29)
        #beta值判定
        if converge(old_beta,beta):
            print(i)
            break
            
        old_beta = beta
    print('end')
    return beta

          中间添加了beta值判定,代码如下:当误差降到0.001后停止

def converge(old_beta,beta):
    sub = beta - old_beta
    for i,j in zip(sub,beta):
        if j != 0 and abs(i/j) >= 0.001:
            return False
    return True

           全部工程代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 21 21:58:19 2018

@author: Zch
"""

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

#load dataset
df_train = pd.read_csv('wm3.0a.csv')
X = np.array(df_train[['密度','含糖量']])
y = np.array(df_train['好瓜'])

def Newton_method(x_data,y_data,iterations,alpha=1):
    #(3.29)P59
    print('start')
    w = np.zeros(x_data.shape[1])
    b = 0
    old_beta=beta = np.append(w,b)
    
    for i in range(iterations):
        beta = old_beta- alpha*derivative(x_data,y_data,old_beta) #(3.29)
        
        if converge(old_beta,beta):
            print(i)
            break
            
        old_beta = beta
    print('end')
    return beta

def converge(old_beta,beta):
    sub = beta - old_beta
    for i,j in zip(sub,beta):
        if j != 0 and abs(i/j) >= 0.001:
            return False
    return True

def derivative(x_data,y_data,beta):
    #(3.30)(3.31) P60
    sum1 = 0
    sum2 = 0
    for x,y in zip(x_data,y_data):
        xi = np.append(x,1)
        sum1 -=xi*(y-P1(xi,beta))#(3.30)
        sum2 +=xi*xi.T*P1(xi,beta)*(1-P1(xi,beta)) #(3.31)
        #print(sum1/sum2)
    return sum1/sum2
        
def P1(x_data,beta):
    #(3.23) P59
    per1=np.exp(np.dot(beta.T,x_data))/(1+np.exp(np.dot(beta.T,x_data)))
    return per1

def predic(x_data,beta):
    y = 1/(1+np.exp(-np.dot(beta.T,x_data)))
    if y < 0.5:
        return False
    elif y > 0.5:
        return True

if __name__ == '__main__':
    beta = Newton_method(X,y,1000,0.05)
    print(beta)
#plt.scatter(x,y)

           由于没有找到相关测试集,所以还没进行调优,路过的大佬,有相关测试集的,麻烦提供一下

机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径。 随着统计学的发展,统计学习在机器学习中占据了重要地位,支持向量机(SVM)、决策树和随机森林等算法的提出和发展,使得机器学习能够更好地处理分类、回归和聚类等任务。进入21世纪,深度学习成为机器学习领域的重要突破,采用多层神经网络模型,通过大量数据和强大的计算能力来训练模型,在计算机视觉、自然语言处理和语音识别等领域取得了显著的成果。 机器学习算法在各个领域都有广泛的应用,包括医疗保健、金融、零售和电子商务、智能交通、生产制造等。例如,在医疗领域,机器学习技术可以帮助医生识别医疗影像,辅助诊断疾病,预测病情发展趋势,并为患者提供个性化的治疗方案。在金融领域,机器学习模型可以分析金融数据,识别潜在风险,预测股票市场的走势等。 未来,随着传感器技术和计算能力的提升,机器学习将在自动驾驶、智能家居等领域发挥更大的作用。同时,随着物联网技术的普及,机器学习将助力智能家居设备实现更加智能化和个性化的功能。在工业制造领域,机器学习也将实现广泛应用,如智能制造、工艺优化和质量控制等。 总之,机器学习是一门具有广阔应用前景和深远影响的学科,它将持续推动人工智能技术的发展,为人类社会的进步做出重要贡献。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值