李宏毅机器学习Lesson2——Logistic Regression实现收入预测

  • 数据集介绍
  • 加载数据集、标准化
  • 定义相关函数
  • 交叉验证训练模型(小小地实现了一下损失函数惩罚项中系数的选择)
    • 此处也用到了黄海广博士在吴恩达机器学习笔记中的代码,感谢如此详实的代码

数据集介绍

数据集来源于Kaggle,是一个美国公民收入的数据集,本次任务的目标是根据多个特征准确区分样本的收入属于哪一个类别(大于50k美元/小于50k美元),从网上下载的数据集中有六个文件
前三个是原始数据集,本次任务使用后三个,这是助教已经根据原始数据集进行一定数据清洗后可以直接拿来建模的数据。

加载数据集、标准化

X_train_fpath = '/Users/weiyubai/Desktop/学习资料/机器学习相关/李宏毅数据等多个文件/数据/hw2/data/X_train'
Y_train_fpath = '/Users/weiyubai/Desktop/学习资料/机器学习相关/李宏毅数据等多个文件/数据/hw2/data/Y_train'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)def normalize_feature(df):
#     """Applies function along input axis(default 0) of DataFrame."""return df.apply(lambda column: (column - column.mean()) / (column.std() if column.std() else 1))#特征缩放函数定义X_train_no = normalize_feature(pd.DataFrame(X_train))#标准化
X_train_no = np.concatenate((np.ones(len(X_train)).reshape(len(X_train),1),X_train_no.values),axis = 1)#为特征添1,作为截距项

至此,数据导入及处理已经完毕。查看一下数据集,X_train_no为54256*511的np数组

定义相关函数

接下来定义梯度下降过程中需要用到的各个函数

def sigmoid(z):return 1 / (1 + np.exp(-z))def cross_entropy(X, y, theta):e=1e-9return np.mean(-y * np.log(np.maximum(sigmoid(X @ theta),e)) - (1 - y ) * np.log(np.maximum(1 - sigmoid(X @ theta),e)))#添加惩罚项的lossfunction
def regularized_cost(X, y,theta, l=1):
#     '''you don't penalize theta_0'''theta_j1_to_n = theta[1:]regularized_term = (l / (2 * len(X))) * np.power(theta_j1_to_n, 2).sum()
#     return regularized_termreturn cross_entropy(X, y, theta) + regularized_termdef gradient(X, y, theta):return (1 / len(X)) * (X.T @ (sigmoid(X @ theta) - y))#添加惩罚项的gradient
def regularized_gradient(X, y,theta, l=1):
#     '''still, leave theta_0 alone'''theta_j1_to_n = theta[1:]regularized_theta = (l / len(X)) * theta_j1_to_n# by doing this, no offset is on theta_0regularized_term = np.concatenate([np.array([0]), regularized_theta])return gradient(X, y,theta) + regularized_termdef predict(x,theta):prob = sigmoid(x @ theta)return (prob >= 0.5).astype(int)

交叉验证训练模型(小小地实现了一下损失函数惩罚项中系数的选择)

此处实现了一下李宏毅老师在开头的课上说的交叉验证选择模型,对加上惩罚项的损失函数进行minimize,选择了六个不同的惩罚项系数,分别进行三折交叉验证,查看其训练集和验证集的平均精度。

from sklearn.model_selection import StratifiedKFold# 划分交叉验证集并保存
n_splits = 3
trainx_set = dict()
validx_set = dict()
trainy_set = dict()
validy_set = dict()gkf = StratifiedKFold(n_splits=3).split(X=X_train_no, y=Y_train)
for fold, (train_idx, valid_idx) in enumerate(gkf):trainx_set[fold] = X_train_no[train_idx] trainy_set[fold] = Y_train[train_idx]validx_set[fold] = X_train_no[valid_idx] validy_set[fold] = Y_train[valid_idx]

交叉验证集先保存下来,随后循环的时候直接取用,不容易出错

# 初始化
lambda_ = [0,0.1,1,10,100,1000]
sum_valid_acc = {}
sum_train_acc = {}
sum_train_loss = {}
sum_valid_loss = {}# 训练
for l in lambda_:
#     theta = np.ones(X_train.shape[1])learning_rate = 0.1epochs = 1000train_loss = {}valid_loss = {}train_acc = {}valid_acc = {}for fold in range(n_splits):theta = np.ones(X_train_no.shape[1])train_inputs = trainx_set[fold]train_outputs = trainy_set[fold]valid_inputs = validx_set[fold]valid_outputs = validy_set[fold]# 迭代训练一次for epoch in range(epochs):loss = cross_entropy(train_inputs, train_outputs, theta)gra = regularized_gradient(train_inputs, train_outputs, theta, l=l)theta = theta - learning_rate * gray_pred_train =  predict(train_inputs,theta)_acc = 1 - np.abs(train_outputs - y_pred_train).sum()/len(train_outputs)train_acc[fold] = _accy_pred_valid = predict(valid_inputs,theta)acc_ = 1 - np.abs(valid_outputs - y_pred_valid).sum()/len(valid_outputs)valid_acc[fold] = acc_  train_loss[fold] = lossvalid_loss[fold] = cross_entropy(valid_inputs, valid_outputs, theta)print('在训练惩罚为{}模型的第{}折'.format(l,fold+1))sum_train_loss[l] = [train_loss[fold] for fold in train_loss]sum_valid_loss[l] = [valid_loss[fold] for fold in valid_loss]sum_valid_acc[l] = [valid_acc[fold] for fold in valid_acc]sum_train_acc[l] = [train_acc[fold] for fold in train_acc]print("已经训练完惩罚为{}的模型".format(l))

最后查看一下六个不同系数惩罚项分别经过3次3折交叉验证后的训练集、验证集平均精度

for l in lambda_:print('lambda为{}时,训练集平均精度为{},验证集平均精度为{}'.format(l,np.mean(np.array(sum_train_acc[l])),np.mean(np.array(sum_valid_acc[l]))))

不过看上去结果也没相差很远,就当作一次小小地记录吧,总体来说验证集的精度都在87%左右

此处也用到了黄海广博士在吴恩达机器学习笔记中的代码,感谢如此详实的代码

李宏毅机器学习Lesson2——Logistic Regression实现收入预测相关推荐

  1. 【李宏毅机器学习】Logistic Regression 逻辑回归(p11) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 文章目录 Logistic Regression Step 1: Function Set Step 2: Goodness of a Function Step ...

  2. 【机器学习】Logistic Regression逻辑回归原理与java实现

    [机器学习]Logistic Regression逻辑回归原理与java实现 1.基于概率的机器学习算法 2.逻辑回归算法原理 2.1.分离超平面 2.2.阈值函数 2.3.样本概率 2.4.损失函数 ...

  3. 【机器学习】Logistic Regression 的前世今生(理论篇)

    Logistic Regression 的前世今生(理论篇) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上 ...

  4. 吴恩达机器学习ex2 Logistic Regression (python)

    Programming Exercise 2: Logistic Regression Machine Learning 目录 Introduction 1 Logistic regression 1 ...

  5. 李宏毅机器学习课程--回归(Regression)

    近期在学习李宏毅老师的机器学习视频(https://www.bilibili.com/video/av10590361/?p=4),下面写一下自己的心得体会. 李老师用的是精灵宝可梦做的比喻,假设进化 ...

  6. 【ML】 李宏毅机器学习一:Regression、Gradient Descent(python实现)

    我的GitHub地址:https://github.com/taw19960426/DeepLearning存放与之对应的python代码 1.Regression 1.1 Introduction ...

  7. 李宏毅机器学习 之 回归Regression(二)

    目录 1.回归的定义 2.回归的例子 3.建模步骤 1)模型假设,选择模型框架(线性模型) 2)模型评估,如何判断众多模型的好坏(损失函数) 3)模型优化,如何筛选最优的模型(梯度下降) 4.步骤优化 ...

  8. 2018-3-20李宏毅机器学习笔记十----------Logistic Regression

    上节讲到:既然是一个直线型,只需要求解w和b.为何还要那么费劲的使用概率??? 视频:李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilib ...

  9. 【ML】 李宏毅机器学习二:Logistic Regression

    我们将在分类模型基础上继续,并开始学习一种常用的分类算法--Logistic回归,逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分 ...

  10. 机器学习笔记:logistic regression

    1 逻辑回归介绍 logistic regressioin是一种二分类算法,通过sigmoid激活函数将线性组合压缩到0和1之间,来代表属于某一个分类的属性 虽然其中带有"回归"两 ...

最新文章

  1. 没有找到borlandmm.dll 报错的解决方法
  2. vue脚手架中使用axios
  3. python nose测试框架全面介绍十---用例的跳过
  4. 关于Unity中坐标系的种类
  5. Fedora 10 的主要功能特性已经冻结
  6. 【Flink】Zookeeper connection loss leads to Flink job restart
  7. 查询、新增、修改、删除方法
  8. 试图运行项目时出错:无法启动调试 没有正确安装调试器
  9. 金蝶精斗云PDA移动扫码入库出库,搭配蓝牙打印机打印单据小票
  10. IT项目管理之第6章 项目成本管理习题之案例分析汇总
  11. “吃鸡”吗?《和平精英》来了,感觉不一般
  12. Spring Boot+Spring Security:注解:@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全 - 第20篇
  13. 非负数 正则表达式
  14. 跟开涛学SpringMVC
  15. obd协议 混动车_OBD协议介绍
  16. ios 隐私政策网址(URL)
  17. js 去掉字符串的空格回车换行
  18. 《大道至简》的幕后故事(3):“愚公移山记”事物篇
  19. 金融界的万骗之祖-庞氏骗局
  20. c语言如何重命名文件夹,VC 复制移动删除重命名文件文件夹

热门文章

  1. 极域电子教室常见问题的解决方法
  2. 打印机驱动下载后只能打印单面(设置双面打印)解决方法
  3. jenkins教程菜鸟_Jenkins教程:修改Jenkins端口号
  4. java面试项目介绍,详细说明
  5. 国际音标的显示和输入
  6. 服务器运维软硬件维护月报,运维月报ppt
  7. 2017锤子科技发布会
  8. KVM虚拟化教程(超详细)
  9. Nginx-详解其原理
  10. 【Xamarin挖墙脚系列:mac 终端 常用命令+Mac OS X的快捷键+beamoff 】