我是一名0基础靠机器学习拿1.5万奖金的文科本科生

跟您一样,我的学习刚开始走过很多弯路:

硬啃周志华老师的《机器学习》西瓜书,一周才读了1页 看吴恩达老师的《机器学习入门课》,看完连“线性回归”是什么都不知道
分不清机器学习算法和算法的区别,甚至把《算法导论》当做机器学习入门书

我身边连会python的都少之又少,更没有任何一个人研究机器学习了,但就是在这样的背景下,我没有报班,没有求助他人,完全靠自学夺得了【2020届全国Datathon数据分析大赛社会组亚军】

这里并不是想宣传什么课程或者是培训班,亦不会做什么书籍推荐,我学会这些的秘诀其实就只有1个字:

练!

是的。

刚开始学习一门新技能,最重要的并不是掌握基础知识,而是培养成就感和兴趣。

接下来我为您准备了一个比较完备且上手简单的机器学习项目,照着项目的代码一段一段进行尝试,

遇到不能理解的代码您可以直接复制,相信您也能够走出自己的机器学习之路,加油!

项目:【线性回归】法国玺镇4年内的家庭用电情况分析

数据源地址:http://archive.ics.uci.edu/ml/datasets/Individual+household+electric+power+consumption

点击上面的【Data Folder】即可下载数据集

1、了解数据和数据集:

这里就不带大家分析了,详见上方提供的网页链接

2、导入相关库、读取数据:

首先先导入常用的pip库(#后的注释内容如果在下没表述清楚,您可不看):

%matplotlib inline
#这行是为了方便jupyter画图,非jupyter环境可以删除这句
import matplotlib.pyplot as plt #这次不在python内画图,因此可以不用导入该库,此行展示仅供参考
import numpy as np
from sklearn.linear_model import LinearRegression
import pandas as pd #个人比较喜欢用modin库,据说会快一些,代码如下:import modin.pandas as pd
import sqldf #如果不太熟悉pandas语法的朋友可以导入这个库,可以用这个pip库来实现通过SQL语法更改dataframe

读取数据要用到这个指令:

df = pd.read_csv('household_power_consumption.txt',sep=';') #该代码不会自动拆分txt,不加分隔符(sep=';')必出问题,如果报错,请在括号内添加Low memory=False

3、特征处理

特征处理可以说是机器学习最重要的一步,这里我们对特征的处理主要还是【数据清洗】:

1、空值处理 2、数据类型转换 3、单位转换 4、特征缩放 5、异常值处理
……

并非所有的数据都要经历以上N个步骤,我们要根据数据的实际情况进行取舍。

首先看看整个数据长啥样,最常用的指令无非就是下面2个:

df.info() #查看数据概况
df.describe() #对数据型特征进行描述统计

注意,【object】代表“对象”这一数据类型,然而根据我们第一部分对【数据描述】的阅读,除了Date和Time代表时间以外,其他的数据类型都应该是数据型。

另外,我们可以看到,在【df.describe()】运行之后,只有一列结果,也就是说:

除了Sub_metering_3是数据型特征以外,其他的本应该是数据型特征的特征的数据类型不对。

这里就能够确定【数据类型转换】是我们一定要做的数据清洗步骤了,不过在这之前,我们先进行【空值处理】,这里推荐一段缺失值可视化代码:

import missingno as msno
msno.matrix(df)

特征Sub_metering_3的空行就是缺失值,这里我们来看看这些缺失值长啥样,根据缺失值的实际情况决定处理方案:

df[df.isnull().values==True] #限制值为缺失值的列全部显示出来

可以看出,特征Sub_metering_3中缺失值所对应的列有很大一部分都是“?”,正是因为非法字符的存在,因此许多特征的数据类型才并非【数据描述】中提到的【数值型】,而全部都是object。

我们这里将异常字符“?”全部替换为缺失值nan然后再统一删除

#将?替换成缺失值
df = df.replace(to_replace='?',value = np.nan)
#丢弃带有缺失值的数据
df = df.dropna()

删除掉缺失值和异常值之后,我们再对所有的特征进行【数值类型转换】:

df=df.apply(pd.to_numeric, errors='ignore') #首先将能转换成数值类型的全部特征转换为数据类型

执行完上述代码后,再执行:

df['Time'] = pd.to_datetime(df['Time'],format="%H:%M:%S")
df['Date'] = pd.to_datetime(df['Date'],format="%d/%m/%Y") #将2个时间特征转换成对应的时间格式

最后我们再来看看现在的数据类型:

很棒,到现在您已经完成了一半的工作!接下来的部分可能要求一点点机器学习基础,您可以查阅周志华老师的《机器学习》第二章 2.1 经验误差与过拟合 来补足一些基本概念。

4、划分训练集和测试集

接下来让我们给模型要验证的X变量和Y变量赋值:

X = df[['Sub_metering_1','Sub_metering_2','Sub_metering_3']]
Y = df['Global_active_power']

赋值完成后,划分训练集和测试集,方便对模型进行检验:

from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X, Y, test_size=0.3, random_state=10) # 测试集为30%

5、特征值标准化

在原始的资料中,各变数的范围大不相同。对于某些机器学习的算法,若没有做过标准化,目标函数会无法适当的运作。

举例来说,多数的分类器利用两点间的距离计算两点的差异,若其中一个特征具有非常广的范围,那两点间的差异就会被该特征左右,因此,我们这里要对模型进行标准化。

from sklearn.preprocessing import StandardScaler #通过去除均值并缩放到单位方差来标准化特征
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train) # 必须先fit才能使用标准化,因此我们这里对模型训练并转换
X_test = scaler.transform(X_test) # 直接使用在模型构建数据上进行一个数据标准化操作,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换,transform(testData),从而保证train、test处理方式相同:

6、模型训练

可能有很多朋友会认为模型构建是最难的,其实不然,前辈们已经为我们准备好了非常多完善的封装函数,只要学会不同函数的应用场景和参数调整,并调用即可,这里用到的是最经典的线性回归:

# 模型训练(线性模型)
lr = LinearRegression()
lr.fit(X_train, Y_train) # 训练模型
y_predict = lr.predict(X_test)  # 预测

7、模型检验

接下来就是见证奇迹的时刻了!我们已经构建好了模型,可以在这一步查看模型的整体效果如何,这里面的一些概念需要一些《计量经济学》基础,这方面您可自行补足

print ("R方:",lr.score(X_test, Y_test)) #可以用不同的模型来输出R方,R方的含义是,预测值解释了y变量的方差的多大比例,该统计参数是预测数据和原始数据对应点误差的平方和的均值
mse = np.average((y_predict-np.array(Y_test))**2) #它是“误差”的平方的期望值,误差就是估计值与被估计量的差
rmse = np.sqrt(mse) #该统计参数,也叫回归系统的拟合标准差,是MSE的平方根
print ("MSE:" ,mse)
print ("RMSE:",rmse)

R方有0.717,从统计学意义上来讲还是非常不错的,如果有一些基础的同学,可以通过以下的代码计算调整后的R方:

y = Y_test
yhat = y_predict
SS_Residual = sum((y-yhat)**2)
SS_Total = sum((y-np.mean(y))**2)
r_squared = 1 - (float(SS_Residual))/SS_Total
adjusted_r_squared = 1 - (1-r_squared)*(len(y)-1)/(len(y)-X.shape[1]-1)
print(r_squared, adjusted_r_squared)

好了,以上就是您的第一个机器学习项目了,如果我有没表述清楚的地方,您可以关注我的公众号【向瑶函】,或者添加我的个人微信:a112901528(请备注【机器学习】)详细了解。

全国数据分析亚军教你0基础开展一个机器学习项目相关推荐

  1. 手把手教你从0开始搭建一个vue项目(完结)

    前言 上一节webpack实战之(手把手教你从0开始搭建一个vue项目)最后我们完成了css样式的配置: webpack.config.js: const path = require("p ...

  2. 手把手教你0基础C语言速通

    0基础速通C语言 配套视频:https://www.bilibili.com/video/BV1W34y1U7eK?spm_id_from=333.999.0.0 关于C语言 C 语言是一种通用的高级 ...

  3. 怎么样在3个月左右从0基础成为一个独立完成项目的工程师?

    IT修真院自问自答系列第十七篇,干货和硬广混杂. 一 前言 2015年6月成立修真院到2017年2月份,我花了一年零八个月的时间来验证我的想法. 第一,程序员可以学习的更快. 第二,每个人都可以通过努 ...

  4. 0基础学web----小鲜项目搭建(拓展)

    01-CSS精灵-作用 02-CSS精灵-使用 <!DOCTYPE html> <html lang="en"> <head><meta ...

  5. 0基础C语言实战项目-贪吃蛇小游戏

    大家好啊,如果有一样是编程0基础的大一本科生,相信大家现在都对自己学习了一段时间的程序设计课程还没有过实战经验: 最近也是考试刚完,持着练手的心态我编写了这样一个经典的小游戏-贪吃蛇: 由于是第一次发 ...

  6. 如何从0开始参与一个开源项目?

    今天我准备和你详细介绍如何开始参与开源项目,帮助你在 GitHub 上完成第一个 PR 的合入. 当然,除了正常的 PR 合入流程之外,我还准备详细介绍一下如果一个 PR 提交后遇到了冲突.需要追加 ...

  7. 【机器学习基础】在机器学习项目中该如何选择优化器

    作者:Philipp Wirth   编译:ronghuaiyang 导读 几种流行的优化器的介绍以及优缺点分析,并给出了选择优化器的几点指南. 本文概述了计算机视觉.自然语言处理和机器学习中常用的优 ...

  8. android 类似按键精灵脚本_按键精灵【第一期】教你 0 基础学写脚本 ———— 【金猪教程】...

    金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚 ...

  9. adams2015怎么把工具栏打开_剪映怎么玩的更好?教你0基础也能秒会的剪映三大进阶级功能!...

    前面我们教给大家剪映APP新手入门的基本玩法(详情可看往期文章),很多小伙伴留言想学会更多关于剪映的技能. 今天,美迪君就给大家分享三个使用频率很高的剪映功能教程,让你的视频呈现出更完美的效果! 一. ...

最新文章

  1. Java基类共同属性设置_java – 你有一个Hibernate实体的基类吗?
  2. 通信系统之信道(一)
  3. SimpleDateFormat-时间格式化中的大小写字符
  4. 蔡高厅老师 - 高等数学阅读笔记 - 14 定积分 -定积分的换元法 - 广义积分和伽马函数(65、66、67)
  5. Python精确指南——第二章 界面开发
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的公寓租赁系统
  7. (转)C#对FTP的操作(上传,下载,重命名文件,删除文件,文件存在检查)
  8. C语言-基础例题55道
  9. 吞食天地2重制版巫妖王panny版存档_11年前的冷饭—Nintendo 任天堂 Switch《宵星传奇 重制版》评测...
  10. Jenkins build light on Windows, with Blinky
  11. ecshop 配置服务器文件夹,ECSHOP3.6安装教程【ECSHOP3.6安装教程步骤】ECSHOP3.6安装教程详细讲解-ECSHOP教程网...
  12. [Power--IC]电源管理IC-STNS01
  13. 【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程,宏、插件和辅助的实战编写笔记和视频记录
  14. 你还记得当年上课天天玩 JAVA游戏吗
  15. unplugin插件
  16. Java的三种代理模式【附源码分析】
  17. [转]Mac 科研常用软件
  18. 潜心一技、做到极致!——Elastic认证工程师之路
  19. WorldView卫星家族简介
  20. 韩顺平Java基础-第一阶段(建立编程思想)

热门文章

  1. 我是培训机构的程序员,不敢告诉任何人
  2. python爬取连续一字板股票及当时日期数据【原创分享】
  3. 关于RISC-V的一些有用的资料
  4. 数学专业的学生的毕业论文是怎样的?
  5. 12V/30A双管正激设计全过程
  6. UE(User Experience)用户体验培训(本大纲可以定制)
  7. 螯合树脂对二价金属离子的吸附能力,处理精度0.02ppm
  8. 微信朋友圈小视频显示服务器超时,微信小视频转发到朋友圈却提示发送失败怎么办?...
  9. Python道路之-----六角星的绘制
  10. 胜利Victor 86E 手持万用表 上位机开发 labview