一、机器学习概念
1.作用
1.通过计算机程序,根据数据去 优化某一个评价指标
2. 从过去的数据中发现规律,然后应用这些规律去 预测 未来的数据
2.过程
3.方法分类
监督式
分类:
- 特点:每个数据都有非连续的类别标签(如苹果、香蕉)
- 举例:垃圾邮件识别、车牌识别、人脸识别、语音识别、医疗图片诊断
回归:
- 特点:每个数据有连续的标签(浮点数)
- 举例:二手车估价、预测股价、预测气温、自动驾驶
非监督式
聚类:
- 特点:只有数据,没有标签
区别:监督式训练方法是输入的训练数据,之后有输出;而非监督式训练方法只有数据输入没有输出。
4.训练流程
数据获取
获取需要学习的数据,放在文件中
清洗数据
去除无用、错误数据等
特征工程
暂未介绍
预处理
- 特征提取
- 处理缺失数据:使用以下方法代替缺失数据(或直接舍弃):
- 均值
- 中间值
- 众数
- 相似数据
- 数据定标:
- 归一化:数据图像在0~1之间,0表示最小值,1表示最大值
- 标准化:数据图像围绕原点
- 数据转换:
- One-Hot encoding
- One/Two/MultiGram
- Bag of words
- 取对数
选择机器学习模型
选择学习的公式样式,列入线性回归的学习模型为Y=a X+b
模型训练
有可能需要调参
模型部署
5.实例一
你所在的公司在电视上做产品广告, 收集到了电视广告投入x(以百万为单位)与产品销售量y(以亿为单位)的数据. 你作为公司的数据科学家, 希望通过分析这些数据, 了解电视广告投入x(以百万为单位)与产品销售量y的关系.
假设x与y的之间的关系是线性的, 也就是说 y = ax + b. 通过线性回归(Linear Regression), 我们就可以得知 a 和 b 的值. 于是我们在未来做规划的时候, 通过电视广告投入x, 就可以预测产品销售量y, 从而可以提前做好生产和物流, 仓储的规划. 为客户提供更好的服务.
函数介绍
1.pandas库(import pandas as pd)
- read_csv()
- 调用:info = pd.read_csv(filename)
- 作用:读取指定的csv文件,生成包含csv数据的DataFrame
- 类似:read_excel(), read_json(), read_sql(), read_html()
- head()
- 调用:hdf = pd.head(num = 5)
- 功能:返回csv列表中前num行的数据(默认为5行),预览
- 返回:DataFrame类型
- columns
- 调用:index_name = df.columns
- 功能:返回数据结构中每列的列名
2.matplotlib.pyplot库:
- .figure()
- 参数:(num = None, figsize = None, dpi = None, facecolor = None, egdecolor = None, frameon = True, Figureclass = <‘class’matplotlib.figure.Figure’>, dear = False, **kwarys)
- num:窗口属性id
- figsize:窗口长宽(元组)
- dpi:分辨率
- facecolor:背景颜色(RGB)
- edgecolor:边框颜色(RGB)
- frameon:窗口图框
- FigureClass:暂不了解
- clear: 清屏
- plt.scatterplt(x, y)
绘制散点图 - plt.xlabel()
对x轴增加文本标签 - plt.ylabel()
对y轴增加文本标签
代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
// 读入数据
data = pd.read_csv("data/Advertising.csv")
data.head() // 预览data前五行
data.columns
// 数据可视化
plt.figure(figsize=(16, 8))
plt.scatter(data['TV'], data['sales'], c ='black')
plt.xlabel("Money spent on TV ads")
plt.ylabel("Sales")
plt.show()
// 训练回归模型
X = data['TV'].values.reshape(-1,1)
y = data['sales'].values.reshape(-1,1)
reg = LinearRegression()
reg.fit(X, y) // 拟合
print('a = {:.5}'.format(reg.coef_[0][0])) // 系数
print('b = {:.5}'.format(reg.intercept_[0]))
print("线性模型为: Y = {:.5}X + {:.5} ".format(reg.coef_[0][0], reg.intercept_[0]))
// 可视化训练好的回归模型
predictions = reg.predict(X)
plt.figure(figsize=(16, 8))
plt.scatter(data['TV'], data['sales'], c ='black')
plt.plot(data['TV'], predictions,c ='blue', linewidth=2)
plt.xlabel("Money spent on TV ads")
plt.ylabel("Sales")
plt.show()
// 预测
predictions = reg.predict([[100]])
print('投入一亿元的电视广告, 预计的销售量为{:.5}亿'.format( predictions[0][0]) )
6.实例二
气温会随着海拔高度的升高而降低, 我们可以通过测量不同海拔高度的气温来预测海拔高度和气温的关系.
我们假设海拔高度和气温的关系可以使用如下公式表达:
y(气温) = a * x(海拔高度) + b
理论上来讲, 确定以上公式 a 和 b的值只需在两个不同高度测试, 就可以算出来 a 和 b 的值了. 但是由于所有的设备都是有误差的, 而使用更多的高度测试的值可以使得预测的值更加准确.
我们提供了在9个不同高度测量的气温值, 请你根据今天学习的线性回归方法预测 a 和 b 的值. 根据这个公式, 我们预测一下在8000米的海拔, 气温会是多少?
代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
data = pd.read_csv("D:\PythonData\height_vs_temperature.CSV")
data.head()
plt.figure(figsize=(16, 8))
plt.scatter(data['height'], data['temperature'], c='black')
plt.xlabel("height")
plt.ylabel("temperature")
plt.show()
x = data['height'].values.reshape(-1, 1)
y = data['temperature'].values.reshape(-1, 1)
reg = LinearRegression()
reg.fit(x, y)
print('a = {:.5}'.format(reg.coef_[0][0]))
print('b = {:.5}'.format(reg.intercept_[0]))
print("线性模型为:Y = {:.5}X + {:.5}".format(reg.coef_[0][0], reg.intercept_[0]))
predictions = reg.predict(x)
plt.figure(figsize=(16, 8))
plt.scatter(data['height'], data['temperature'], c='black')
plt.plot(data['height'], predictions, c='blue', linewidth=2)
plt.xlabel('height')
plt.ylabel('temperature')
plt.show()
predictions = reg.predict([[8000]])
print("海拔为8000米时,预计气温为{:.5}摄氏度".format(predictions[0][0]))
数据图像:
训练后的图像:
a = -0.0065695
b = 12.719
线性模型为:Y = -0.0065695X + 12.719
海拔为8000米时,预计气温为-39.838摄氏度