04| 实战5步(下):怎么建立估计10万+软文点击率的模型?
第 3 步 选择算法并建立模型
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了建立估计软文点击率的机器学习模型的实战步骤。作者首先讲解了选择算法并建立模型的步骤,指出了回归分析的重要性,并选择了线性回归算法来建模。接着介绍了使用scikit-learn工具包中的LinearRegression算法包来建立模型的方法。作者还解释了模型的内部参数和外部参数,并指出对于简单模型来说,默认的外部参数设置通常是不错的选择。最后,作者强调了训练拟合机器学习模型的重要性。整篇文章以简洁清晰的语言介绍了建立模型的关键步骤,适合读者快速了解机器学习模型建立的基本流程。文章通过讲解训练模型的步骤,强调了fit方法的重要性,以及模型优化的过程,包括损失函数、梯度下降等概念。通过简洁的语言和图示,读者能够快速了解模型训练的关键环节,为进一步学习和实践提供了基础知识。文章还提到了模型的评估和优化过程,包括使用$R^{2}$和MSE指标进行模型效果评估,以及调整模型的外部参数和选择合适的算法来优化模型。整体而言,本文为读者提供了一次完整的机器学习实战经历,并引导他们进一步加深对数据和机器学习概念的理解,挖掘出数据中的价值。
《零基础实战机器学习》,新⼈⾸单¥59
全部留言(21)
- 最新
- 精选
- 茜茜置顶黄老师,我有一个问题,在使用GridSearchCV前,需要划分训练集和测试集吗?按照什么比例划分呢?谢谢
作者回复: 看到你的答案里面已经用了GridSearchCV。很好,GridSearchCV,默认已经使用了5折交叉验证,就是其中的CV参数。那么我们原来不是说3个集吗,训练集,验证集,测试集。因为GridSearchCV有已经自带交叉验证的存在。就不再需要验证集了。 而测试集,还需要,目的是把GridSearchCV的交叉验证结果拿到测试集做最后测试。 好问题。谢谢。
2021-09-0647 - 茜茜置顶在方法2我使用了网格搜索自动调参,可以获得更好的预测评分。 # 思考题; from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.model_selection import GridSearchCV import pandas as pd import chardet import itertools #查询编码格式 with open('易速鲜花微信软文.csv', 'rb') as f: enc = chardet.detect(f.read()) # or readline if the file is large #读取数据 df_ads = pd.read_csv('易速鲜花微信软文.csv', encoding = enc['encoding']) # 判断空值 df_ads.isna().sum() # 删掉含空值的行 df_ads = df_ads.dropna() # 构建特征集和标签集 x = df_ads.drop(['浏览量'], axis = 1) y = df_ads['浏览量'] # 拆分训练集(80%)和测试集(20%) xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size = 0.2, random_state = 0) # 调参:方法一 fit_intercept_list = [True, False] normalize_list = [True, False] print('方法1') for item in itertools.product(fit_intercept_list, fit_intercept_list): fit_intercept = item[0] normalize = item[1] # 训练模型 linereg_model = LinearRegression(fit_intercept = fit_intercept, normalize = normalize) linereg_model.fit(xtrain, ytrain) # 预测测试集对的y值 y_pred = linereg_model.predict(xtest) # 给出模型评分(使用验证集) print(f'参数组合; fit_intercept = {fit_intercept},normalize = {normalize}','线性回归预测评分:', linereg_model.score(xtest, ytest)) # 调参:方法2 model = LinearRegression() # 建立需要搜索的参数的范围 param ={'fit_intercept':[True, False],'normalize': [True, False]} # 初始化网格搜索的方法 grid = GridSearchCV(model,param) #用网格搜索方法进行拟合数据 grid.fit(x, y) # 输出最优的参数组合 print('方法2') print('最佳模型的参数组合:', grid.best_params_) print('样本得分平均值:',grid.best_score_) print('最佳模型测预测评分:',grid.score(xtest, ytest)) #结论: #1. 最佳参数组合是:{'fit_intercept': True, 'normalize': True} 或 {'fit_intercept': True, 'normalize': False} #2. 方法2 的预测评分:0.75 高于方法1的预测评分:0.74
作者回复: 十分认真!
2021-09-06413 - 在路上置顶佳哥好,这节课的示例在我的电脑上运行会报错:Glyph 28909 missing from current font. font.set_text(s, 0.0, flags=flags),原因是中文字体乱码,解决方法是设置一个本地有的中文字体,可以先打印下本地支持的字体,方法如下,在`import matplotlib.pyplot as plt`这条语句所在的单元格插入代码: ``` from matplotlib import font_manager for font in font_manager.fontManager.ttflist: # 查看字体名以及对应的字体文件名 print(font.name, '-', font.fname) # 我使用了微软雅黑 plt.rcParams['font.sans-serif']='Microsoft YaHei' ``` 调整参数后的测试结果是: LinearRegression(normalize = True, fit_intercept= False) 线性回归预测集评分: 0.689427235535854 线性回归训练集评分: 0.6947857687516026 LinearRegression(normalize = False, fit_intercept= False) 线性回归预测集评分: 0.689427235535854 线性回归训练集评分: 0.6947857687516026 LinearRegression(normalize = True, fit_intercept= True) 线性回归预测集评分: 0.740552064611524 线性回归训练集评分: 0.7422107889561247 LinearRegression(normalize = True, fit_intercept= True) 线性回归预测集评分: 0.740552064611524 线性回归训练集评分: 0.7422107889561247
作者回复: 置顶!
2021-09-06214 - ZzzL老师代码有点小错误。 在输出“当前模型的4个特征的权重”那里应该修改为(是linereg_model不是model): print('当前模型的4个特征的权重分别是: ', linereg_model.coef_) print('当前模型的截距(偏置)是: ', linereg_model.intercept_)
作者回复: 谢谢同学细心的指正,我们会更新这块代码。
2022-04-175 - u代码: @pytest.mark.parametrize("fit_intercept", [True, False]) @pytest.mark.parametrize("normalize", [True, False]) def test_train_model(fit_intercept, normalize): df_cleaned = df_data.dropna() feature_set = df_cleaned.drop(['浏览量'], axis=1) label_set = df_cleaned['浏览量'] x_train, x_test, y_train, y_test = train_test_split(feature_set, label_set, train_size=0.8, test_size=0.2, random_state=0) line_reg_model = LR(fit_intercept=fit_intercept, normalize=normalize) line_reg_model.fit(x_train, y_train) y_pred = line_reg_model.predict(x_test) features = x_test.copy() features['真浏览量'] = y_test features['预测浏览量'] = y_pred print() print("===============fit_intercept=", fit_intercept, ",normalize=", normalize, "====================") print("模型的权重分别是:", line_reg_model.coef_) print("模型的截距是:", line_reg_model.intercept_) print("线性回归预测分数是:", line_reg_model.score(x_test, y_test)) print("========================================")
作者回复: 👍
2021-09-075 - 🇱 、🇲佳哥,我在删除nan的行之后,再统计NAN出现的次数,还是有nan。这就导致后面建模型,报错 ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
作者回复: 明佬群中解决了对吧,用inplace = True让删除语句直接修改原有df对象。
2021-11-1022 - 蝶舞清风寒线性回归函数:LinearRegression 1、fit_intercept=True, bool型,默认为True,对训练数据进行中心化,false的话,说明数据已经进行中心化; 2、 normalize布尔型,默认为false,说明:是否对数据进行标准化处理; 步骤:数据清洗、数据集成、数据变化、数据分析。 我理解这主要是为了数据变化,实现数据正态分布。
作者回复: 1、fit_intercept=True, bool型,默认为True,对训练数据进行中心化,false的话,说明数据已经进行中心化;------ 总结的很好哦! 2. normalize布尔型,默认为false,说明:是否对数据进行标准化处理;---- 我对文档的理解应该是对数据进行某种归一化缩放,(If True, the regressors X will be normalized before regression by subtracting the mean and dividing by the l2-norm. ),如果需要标准化,实现数据的正态分布,应该使用StandardScaler。 ---- 所以这个normalize和标准化(standardize)还是有区别的,这是我的理解。😁
2021-09-1322 - GAC·DU对fit_intercept和normalize这两个参数做了一下测试,发现normalize的值是True还是False对模型评估的值几乎没有影响,但是fit_intercept的值如果为False对模型评估值影响较大,我用google colab进行的测试。
作者回复: 课代表!
2021-09-0632 - 年轻👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍
作者回复: 给力!后续内容更精彩,敬请期待。
2021-09-062 - 河宣潮广有个问题,请教老师,热度指数和其他几个变量是不是有明确的计算公式。
作者回复: 这里只是一个极简化了的示例,因此并没有明确计算公式。在具体的业务模型中,不同场景的业务指标都会有对应的计算方法,不过这并非这个示例的关注点。
2021-10-031