个人公众号 yk 坤帝
后台回复 机器学习解析 获取完整源代码
全文疑难仅代表个人理解,如有差错,不完美的地方,
欢迎各位大佬斧正,感激不尽!!!
9.1 demo06_boston.ipynb 波士顿地区房屋价格预测
利用机器学习进行发票识别
收集数据集,探索性数据分析,数据预处理,数据分割,利用训练集建立预测模型,选择最佳模型,训练–验证–测试集分割,模型建立,参数调优,模型评价。
2.什么是训练集、测试集在机器学习模型的开发过程中,希望训练好的模型能在新的、未见过的数据上表现良好。为了模拟新的、未见过的数据,对可用数据进行数据分割,从而将其分割成2部分(有时称为训练—测试分割)。特别是,第一部分是较大的数据子集,用作训练集(如占原始数据的80%),第二部分通常是较小的子集,用作测试集(其余20%的数据)。需要注意的是,这种数据拆分只进行一次。
3.什么是预测模型利用训练集建立预测模型,然后将这种训练好的模型应用于测试集(即作为新的、未见过的数据)上进行预测。
4.什么是损失函数用来估量模型的预测值f (x)与真实值Y的不一致程度
5.模型训练与模型测试的区别模型训练:将训练集数据进行训练,求出预测函数
模型测试:将测试集数据放进预测函数中进行模拟、检验
假设房屋价格只与房屋面积有关(x_i表示),价格为y,
求基于一元线性回归的预测模型?
求基于均方误差的损失函数?
求解回归模型的参数?
基于一元线性回归的预测模型: yi=wxi+ b
基于均方误差的损失函数:
回归模型的参数:
与预测模型的区别?
与损失函数的区别?
与应用场景的区别?
7.1与预测模型的区别
预测模型
线性回归:一般用向量形式表示 f(x),即
Logistic 回归:
当p0(xi)<0.5时,即zi<0时,则令yi=0(预测为负)
当p0(xi)>0.5时,即zi>0时,则令yi=0(预测为正)
p0(xi)值越小分类为0(负)概率越高,反之分类为1(正)概率越大。
7.2与损失函数的区别
线性回归:线性回归是连续的,所以可以使用MSE来定义损失函数。
Logistic回归:逻辑回归不是连续的,线性回归损失函数定义的经验无法使用。可以用最大似然法来推导出损失函数,
7.3与应用场景的区别
线性回归模型的先决条件是所有的变量都是连续变量,随着自变量 x 的增加,因变量 y 也 会增加;Logistic 回归适合当因变量为离散变量时,拟合出 x 与 y 的关系。
8.朴素贝叶斯数学理论解析使用朴素贝叶斯方法,预测x={2,푆}对应的类别标签(y)
解答过程,需要一定的数学基础:
9.1 demo06_boston.ipynb 波士顿地区房屋价格预测
问题六简单房价预测问题的代码部分:
个人公众号 yk 坤帝 后台回复 机器学习解析 获取完整源代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt import sklearn.datasets as sd boston = sd.load_boston() #boston.keys() print(boston.DESCR) boston.keys() boston.data boston.data.shape,boston.target boston.data.shape,boston.target.shape boston.data[0],boston.target[0] #加载数据集 import sklearn.datasets as sd boston = sd.load_boston() #将数据存入dataframe data = pd.Dataframe(boston.data,columns= boston.feature_names) data['TARGET'] = boston.target data.describe() #对某些字段进行简单的数据分析 data.pivot_table(index = 'CHAS',values = ['TARGET']) #如果想使用这组数据训练线性模型,则要先验证特征与输出的关系是否是线性关系 data.plot.scatter(x = 'RM', y = 'TARGET') data.plot.scatter(x = 'DIS', y = 'TARGET') data.plot.scatter(x = 'PTRATIO', y = 'TARGET') plt.scatter(x = data['PTRATIO'], y = data['TARGET'])
import sklearn.model_selection as ms import sklearn.metrics as sm import sklearn.linear_model as lm #整理输入输出集,拆分测试集训练集 x,y = data.iloc[:,:-1] ,data['TARGET'] #x.shape,y.shape #random_state:随机种子 对同一组数据使用相同的随机种子划分数据集,得到的结果是一样的 train_x,test_x,train_y,test_y = ms.train_test_split(x,y,test_size = 0.1,random_state = 7) train_x.shape,train_y.shape #训练一个模型 model = lm.LinearRegression() model.fit(train_x,train_y) #针对测试样本进行测试,评估 pred_test_y = model.predict(test_x) print(sm.r2_score(test_y,pred_test_y))
个人公众号 yk 坤帝
后台回复 机器学习解析 获取完整源代码
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
x = np.array([0.5, 0.6,0.8,1.1,1.4])
y = np.array([5.0,5.5,6.0,6.8,7.0])
#加载数据集
data = pd.read_csv('qq邮箱.csv')
#data
x = data['YearsExperience']
y = data['Salary']
plt.grid(linewidth = 2)
plt.scatter(x,y,s = 60,color = 'dodgerblue' ,label = 'Samples')
基于梯度下降算法,不断更新w0与w1,从而找到最佳的模型参数
个人公众号 yk 坤帝
后台回复 机器学习解析 获取完整源代码
# x = np.array([0.5, 0.6,0.8,1.1,1.4])
# y = np.array([5.0,5.5,6.0,6.8,7.0])
#基于梯度下降算法,不断更新w0与w1,从而找到最佳的模型参数
w0,w1,lrate = 1,1,0.001
times = 600
w0s,w1s,losses,epoches = [],[],[],[]
for i in range(times):
#输出每一轮运算过程中,w0,w1,loss的变化过程
loss = 1/2 * ((w0 + w1*x - y)**2).sum()
print('{:4},w0:{:.8f},w1:{:.8f},loss:{:.8f}'.format(i+1,w0,w1,loss))
epoches.append(i+1)
w0s.append(w0)
w1s.append(w1)
losses.append(loss)
#计算w0与w1方向上的偏导数,代入模型参数的更新公式
d0 = (w0 + w1*x - y).sum()
d1 = (x*(w0 + w1*x - y)).sum()
w0 = w0 - lrate*d0
w1 = w1 - lrate*d1
w0,w1 #(截距,斜率)
#绘制样本点
plt.grid(linestyle = ':')
plt.scatter(x,y,s = 60,color = 'dodgerblue' ,label = 'Samples')
#绘制回归线
pred_y = w0 + w1 * x
plt.plot(x , pred_y , color = 'orangered' ,
linewidth = '2', label = 'Regression Line')
plt.subplot(3,1,1)
plt.grid(linestyle = ':')
plt.ylabel('w0')
plt.plot(epoches,w0s,color = 'dodgerblue',label = 'w0')
plt.legend()
plt.subplot(3,1,2)
plt.grid(linestyle = ':')
plt.ylabel('w1')
plt.plot(epoches,w1s,color = 'dodgerblue',label = 'w1')
plt.legend()
plt.subplot(3,1,3)
plt.grid(linestyle = ':')
plt.ylabel('loss')
plt.plot(epoches,losses,color = 'orangered',label = 'loss')
plt.legend()
plt.subplot(3,1,1)
plt.grid(linestyle = ':')
plt.ylabel('w0')
plt.plot(epoches,w0s,color = 'dodgerblue',label = 'w0')
plt.legend()
plt.xticks([])
plt.subplot(3,1,2)
plt.grid(linestyle = ':')
plt.ylabel('w1')
plt.plot(epoches,w1s,color = 'dodgerblue',label = 'w1')
plt.legend()
plt.xticks([])
plt.subplot(3,1,3)
plt.grid(linestyle = ':')
plt.ylabel('loss')
plt.plot(epoches,losses,color = 'orangered',label = 'loss')
plt.legend()
全文疑难仅代表个人理解,如有差错,不完美的地方,
欢迎各位大佬斧正,感激不尽!!!
个人公众号 yk 坤帝
后台回复 机器学习解析 获取完整源代码



