李宏毅机器学习课后作业(hw2)

直接上代码

import numpy as np
np.random.seed(0)
X_train_fpath = "C:\\Users\\13554\\jupyter practice\\lihongyi\\hw2\\data\\X_train"
Y_train_fpath = "C:\\Users\\13554\\jupyter practice\\lihongyi\\hw2\\data\\Y_train"
X_test_fpath = "C:\\Users\\13554\\jupyter practice\\lihongyi\\hw2\\data\\X_test"
output_fpath = "C:\\Users\\13554\\jupyter practice\\lihongyi\\hw2\\data\\output_{}.csv"
with open(X_train_fpath) as f:next(f)X_train = np.array([line.strip('\n').split(',')[1:] for line in f], dtype = float)
with open(Y_train_fpath) as f:next(f)Y_train = np.array([line.strip('\n').split(',')[1] for line in f], dtype = float)
with open(X_test_fpath) as f:next(f)X_test = np.array([line.strip('\n').split(',')[1:] for line in f], dtype = float)
def _normalize(X, train = True, specified_column = None, X_mean = None, X_std = None):if specified_column == None:specified_column = np.arange(X.shape[1])if train:X_mean = np.mean(X[:, specified_column] ,0).reshape(1, -1) #对所有行按列取平均值X_std  = np.std(X[:, specified_column], 0).reshape(1, -1)X[:,specified_column] = (X[:, specified_column] - X_mean) / (X_std + 1e-8)return X, X_mean, X_stddef _train_dev_split(X, Y, dev_ratio = 0.25):# This function spilts data into training set and development set.train_size = int(len(X) * (1 - dev_ratio))return X[:train_size], Y[:train_size], X[train_size:], Y[train_size:]X_train, X_mean, X_std = _normalize(X_train, train = True)
X_test, _, _= _normalize(X_test, train = False, specified_column = None, X_mean = X_mean, X_std = X_std)
dev_ratio = 0.2
X_train, Y_train, X_dev, Y_dev = _train_dev_split(X_train, Y_train, dev_ratio = dev_ratio)
train_size = X_train.shape[0]
dev_size = X_dev.shape[0]
test_size = X_test.shape[0]
data_dim = X_train.shape[1]
print('Size of training set: {}'.format(train_size))
print('Size of development set: {}'.format(dev_size))
print('Size of testing set: {}'.format(test_size))
print('Dimension of data: {}'.format(data_dim))def _shuffle(X, Y):# This function shuffles two equal-length list/array, X and Y, together.randomize = np.arange(len(X))np.random.shuffle(randomize)return (X[randomize], Y[randomize]) #将X,Y的所有行随机重新排列def _sigmoid(z):return np.clip(1 / (1.0 + np.exp(-z)), 1e-8, 1 - (1e-8))def _f(X, w, b):return _sigmoid(np.matmul(X, w) + b)def _predict(X, w, b):return np.round(_f(X, w, b)).astype(np.int) #round四舍五入,保证预测值是0-1def _accuracy(Y_pred, Y_label):# This function calculates prediction accuracyacc = 1 - np.mean(np.abs(Y_pred - Y_label))return acc
def _cross_entropy_loss(y_pred, Y_label):cross_entropy = -np.dot(Y_label, np.log(y_pred)) - np.dot((1 - Y_label), np.log(1 - y_pred))return cross_entropydef _gradient(X, Y_label, w, b):# This function computes the gradient of cross entropy loss with respect to weight w and bias b.y_pred = _f(X, w, b)pred_error = Y_label - y_predw_grad = -np.sum(pred_error * X.T, 1)#Loss对w,b的倒数b_grad = -np.sum(pred_error)return w_grad, b_gradw = np.zeros((data_dim,))
b = np.zeros((1,))
max_iter = 100
batch_size = 1
learning_rate = 0.02
# Keep the loss and accuracy at every iteration for plotting
train_loss = []
dev_loss = []
train_acc = []
dev_acc = []
# Calcuate the number of parameter updates
step = 1
# Iterative training
for epoch in range(max_iter): #max_iter是训练次数# Random shuffle at the begging of each epochX_train, Y_train = _shuffle(X_train, Y_train)# Mini-batch trainingfor idx in range(int(np.floor(train_size / batch_size))): #将batch_size行数据作为一次数据更新w,b,总共更新了len(X)*max_iter/8次X = X_train[idx*batch_size:(idx+1)*batch_size]Y = Y_train[idx*batch_size:(idx+1)*batch_size]# Compute the gradientw_grad, b_grad = _gradient(X, Y, w, b)   # gradient descent update# learning rate decay with timew = w - learning_rate/np.sqrt(step) * w_gradb = b - learning_rate/np.sqrt(step) * b_gradstep = step + 1y_train_pred = _f(X_train, w, b)Y_train_pred = np.round(y_train_pred)train_acc.append(_accuracy(Y_train_pred, Y_train))train_loss.append(_cross_entropy_loss(y_train_pred, Y_train) / train_size)y_dev_pred = _f(X_dev, w, b)Y_dev_pred = np.round(y_dev_pred)dev_acc.append(_accuracy(Y_dev_pred, Y_dev))dev_loss.append(_cross_entropy_loss(y_dev_pred, Y_dev) / dev_size)import matplotlib.pyplot as pltprint('Training accuracy: {}'.format(train_acc[len(train_acc)-1]))
print('Development accuracy: {}'.format(dev_acc[len(dev_acc)-1]))# Loss curve
plt.plot(train_loss)
plt.plot(dev_loss)
plt.title('Loss')
plt.legend(['train', 'dev'])
plt.savefig('loss.png')
plt.show()# Accuracy curve
plt.plot(train_acc)
plt.plot(dev_acc)
plt.title('Accuracy')
plt.legend(['train', 'dev'])
plt.savefig('acc.png')
plt.show()predictions = _predict(X_test, w, b)
with open(output_fpath.format('logistic'), 'w') as f:f.write('id,label\n')for i, label in  enumerate(predictions):f.write('{},{}\n'.format(i, label))# Print out the most significant weights
ind = np.argsort(np.abs(w))[::-1]
with open(X_test_fpath) as f:content = f.readline().strip('\n').split(',')
features = np.array(content)
for i in ind[0:10]:print(features[i], w[i])

李宏毅机器学习课后作业(hw2)相关推荐

  1. 李宏毅机器学习课后作业(hw1)

    数据集下载链接: 链接: https://pan.baidu.com/s/1k7cEfzza7zZqaosEgPjlxw 提取码: 8z93 完整代码 import numpy as np impor ...

  2. 【深度解析→博文总结】李宏毅机器学习2023作业02Classification(Framewise Phoneme Prediction)

    文章目录 [系列文章] [简要说明] [视频分享] [作业详情] [调参记录] [Simple Baseline:0.49798] [Medium Baseline:0.66440] [Stong B ...

  3. 吴恩达机器学习课后作业——偏差和方差

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  4. 目录:吴恩达机器学习课后作业

    简单介绍 本博客为作者自行完成的吴恩达机器学习课后练习题目录,均使用PyTorch进行实现,无法保证对错,仅供参考. 作业题目以及源代码 百度云盘连接 提取码:3dvb 题目的命名方式与下表中的作业名 ...

  5. 吴恩达机器学习课后作业——SVM支持向量机

    支持向量机 一.作业内容 在本练习的前半部分,您将对各种示例2D数据集使用支持向量机(svm).使用这些数据集进行试验将帮助您直观地了解支持向量机的工作方式,以及如何在支持向量机中使用高斯核.在练习的 ...

  6. 吴恩达机器学习课后作业——线性回归(Python实现)

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

  7. ⭐李宏毅机器学习2020作业汇总

    更新进度:■■■■■□□□□□□□□□□□□□□□|30% 李宏毅机器学习code 序号 主题 完成情况 作业一 Linear Regression ✅ 作业二 Classification ✅ 作业 ...

  8. 吴恩达机器学习课后作业——线性回归

    一.单变量线性回归 一.作业内容 假设你是一家特许经营餐厅的首席执行官,正在考虑在不同的城市开一家新店,该连锁店已经在各个城市开设了餐车,文件ex1data1.txt中包含你这些城市的利润和人口数据. ...

  9. hw1例题-李宏毅老师课后作业

    写在前面 跟着李宏毅老师从头开始学习深度学习,因此这里用CSDN记录深度学习的课后例题,需要注意的是以下代码来源于网上,应该是李老师的代码,版权不属于我,写这篇博客主要为了巩固自己关于机器(深度)学习 ...

最新文章

  1. python多线程实现生产者消费者_用Python实现多线程“生产者-消费者”模型的简单例子...
  2. PyTorch入门v2.pptx
  3. 关于读完《软件工程》之后不解的问题
  4. matlab创建数组对象,MATLAB一维数组(向量)的定义
  5. 前端学习(2888):如何短时间内实现v-for 模板编译1
  6. windows安装nvm
  7. Android面经分享,失业两个月,五一节前拿到offer
  8. NGINX下红黑树的删除(终章)附GIF
  9. docker_3 docker 部署练习
  10. studio one 3 机架声道设置_Lenovo UC30 声卡驱动跳线VST机架跳线
  11. 蓝色对比关系图表合集PPT模板
  12. postman并发测试_三种高并发测试工具总结(Postman,Apache Bench,Jmeter)
  13. chrome清除缓存快捷键
  14. linux鼠标垫图片,如何自制智能游戏鼠标垫
  15. 服务器故障导致网站打不开,网站打不开的6种现象及解决方法
  16. 流刷新函数:fflush()的介绍和用法
  17. 蓝绿红黑灰|常用的发布方式
  18. python画circos图_Circos图--在线绘制
  19. 如何安装一个虚拟机?(简单15步,安装VMware16.1.1详细教程)
  20. matlab画双曲线的四种方法

热门文章

  1. 企业不可忽视的舆情监测管理办法,TOOM舆情监控工作总结?
  2. python从入门到实践13章答案
  3. 新浪 百度 网站架构思路
  4. android 截屏 效率,android 截屏以及对该图进行模糊
  5. 树与二叉树之间的相互转换、树的遍历
  6. 小鼠植入前胚胎的可接近染色质图谱
  7. steam搬砖项目拆解,据说单卖3000+
  8. 【Google Play】2021 年 8 月之后的 APK 与 App Bundle 上传格式问题
  9. 【Vivado】clock ip核的使用
  10. 宁波市第九医院采购服务器容灾设备项目