机器学习之线性回归

机器学习的术语:

1.标签:标签指的是我们要对其作出预测的目标。比如说小麦的价格,鱼的种类
2.特征:特征是输入变量。我们通过特征来判断标签。比如判断一件东西是不是叶子。可以通过它的颜色,形状等等
3.样本:有标签样本&无标签样本
有标签样本:已明确表明为垃圾邮件的信件;使用有标签样本训练模型
无标签样本:使用无标签样本来检测模型的正确性
4.模型:通过上述方式,可以定义特征和标签之间的关系 这就是模型。它包括两个生命周期:训练和判断
回归模型:连续的。股票的价格
分离模型:离散的。
深入了解机器学习:
1.线性回归:Y = WX+b W是斜率。W和X可能有小下标,因为它有多个维度
2.误差:用方差来表示。 (标准值-预测值)^2 有时是((标准值-预测值)^2 )/D
3经验风险最小化:使整体误差达到最小
4损失:损失即误差
减小误差的方法:
1.寻找一个合适的学习梯度,使其以更少的步数达到最低点。该学习梯度不能太大也不能太小。太大将造成永远无法到达最低点。太小造成步数过多
2.小批量梯度下降法:使用10-1000个样本
3.迭代方法
4.梯度下降法(凸型结构):
1)起点并不重要,可选择0或随机值
2)梯度是偏导数的矢量,可以让我们了解到哪个方向离目标值更远或更近
5.学习速率
6.超参数:编程人员在机器学习算法中用于调整的旋钮;学习速率就是一个超参数

编程案例

根据加尼福利亚洲的数据,基于单个输入特征预测各城市街区的房屋中位数,通过调整模型的超参数提高模型准确率。

引入需要的包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from __future__ import print_function
import math
from IPython import display
#matplotlib——画图
from matplotlib import cm
from matplotlib import gridspec
from matplotlib import pyplot as plt
import numpy as np
#pandas——读取数据
import pandas as pd
from sklearn import metrics
import tensorflow as tf
from tensorflow.python.data import Dataset
tf.logging.set_verbosity(tf.logging.ERROR)
pd.options.display.max_rows = 10
pd.options.display.float_format = '{:.1f}'.format
加载数据集
1
california_housing_dataframe = pd.read_csv("G:/python/houseValue/california_housing_train.csv",sep=",")
处理数据和获取数据
1
2
3
4
5
6
7
8
9
10
#对数据进行随机排列
california_housing_dataframe = california_housing_dataframe.reindex(
np.random.permutation(california_housing_dataframe.index))
california_housing_dataframe["median_house_value"] /= 1000.0
#使用房屋总数作为特征
my_feature = california_housing_dataframe[['total_rooms']]
feature_columns = [tf.feature_column.numeric_column("total_rooms")]
#使用房屋价格中位数作为标签
targets = california_housing_dataframe['median_house_value']
优化器
1
2
3
4
5
6
7
8
9
10
11
#tf.train.GradientDescentOptimizer——实现梯度下降算法的优化器
#Gradient Descent 梯度下降法,不断迭代调整参数,找到权重和偏差的最佳组合,将损失将到最低
my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0000001)
#设置梯度上限,防止其过大,造成梯度爆炸
my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)
#LinearRegressor类用来训练一个线性回归模型,来预测该特征值对应的标签值
linear_regressor = tf.estimator.LinearRegressor(
feature_columns=feature_columns,
optimizer=my_optimizer
)
定义输入函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):
#把features变成一个字典形式为:“key":xxxx yyyyy zzzz... ,把它变成一个新的字典,后面的数据是被numpy变成数组形式
features = {key:np.array(value) for key,value in dict(features).items()}
# 创建了一个数据集
ds = Dataset.from_tensor_slices((features,targets))
# 将batch_size个元素组成batch;repeat的功能就是将整个序列重复多次
ds = ds.batch(batch_size).repeat(num_epochs)
# Shuffle:打乱数据
if shuffle:
ds = ds.shuffle(buffer_size=10000)
# 返回下一个批次的数据;make_one_shot_iterator迭代器读取数据
features, labels = ds.make_one_shot_iterator().get_next()
return features, labels
训练模型
1
2
3
4
5
# my_input_fn存在return dataset.make_one_shot_iterator().get_next();它将一批样本传回调用方(train方法)
_ = linear_regressor.train(
input_fn = lambda:my_input_fn(my_feature, targets),
steps=100
)
您的支持将鼓励我继续创作!