news 2026/9/27 22:17:29

理解机器学习的各种算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
理解机器学习的各种算法

所有算法

回归和分类作为两种类型的算法,都出现回归(线性回归和逻辑回归)的算法,如何理解。

线性回归和逻辑回归的区别

线性回归:一个参数一个值(参数不断的变化,值不断的变化)。逻辑回归是基于先线性回归的基础上加一个sigmod函数的判断,得出最终的一个分类结果(0/1). 这就是线性回归和逻辑回归的区别。

线性回归例子:

import numpy as np from sklearn.linear_model import LinearRegression # 准备数据 X = np.array([[50], [60], [70], [80], [90], [100]]) # 面积 y = np.array([150, 180, 210, 240, 270, 300]) # 房价 # 创建并训练模型 model = LinearRegression() model.fit(X, y) # 查看学到的参数 print("权重 w =", model.coef_[0]) # 3.0 print("偏置 b =", model.intercept_) # 0.0 # 预测 75 平米 pred = model.predict([[75]]) print("75 平米预测房价 =", pred[0], "万元") # 225.0

逻辑回归例子:

import numpy as np from sklearn.linear_model import LogisticRegression # 准备数据 X = np.array([[1], [2], [3], [4], [5], [6], [7], [8]]) # 学习时长 y = np.array([0, 0, 0, 1, 1, 1, 1, 1]) # 是否通过 # 创建并训练模型 model = LogisticRegression() model.fit(X, y) # 查看学到的参数 print("权重 w =", model.coef_[0][0]) print("偏置 b =", model.intercept_[0]) # 预测 3.5 小时 prob = model.predict_proba([[3.5]])[0][1] pred = model.predict([[3.5]])[0] print(f"3.5 小时通过概率 = {prob:.3f}") print(f"预测类别 = {pred}")

如何理解参数中的 [**]

prob和pred分别代表什么意思,为什么prob有两个值?

岭回归:

import numpy as np from sklearn.linear_model import Ridge, LinearRegression # 准备数据 X = np.array([[50, 1], [60, 2], [70, 3], [80, 4], [90, 5], [100, 6]]) # 面积, 房龄 y = np.array([150, 180, 210, 240, 270, 300]) # 房价 # 普通线性回归 ols = LinearRegression() ols.fit(X, y) print("普通线性回归:") print(" 权重 =", ols.coef_) print(" 偏置 =", ols.intercept_) # 岭回归 ridge = Ridge(alpha=1.0) # alpha 就是 λ ridge.fit(X, y) print("\n岭回归 (alpha=1.0):") print(" 权重 =", ridge.coef_) print(" 偏置 =", ridge.intercept_) X_new = np.array([[75, 3]]) print("普通线性回归预测:", ols.predict(X_new)[0]) print("岭回归预测:", ridge.predict(X_new)[0])

Lasso回归:

import numpy as np from sklearn.linear_model import LinearRegression, Ridge, Lasso # 数据 X = np.array([[50, 2, 1, 3, 10], [60, 2, 2, 5, 9], [70, 3, 3, 8, 8], [80, 3, 4, 10, 7], [90, 4, 5, 12, 6], [100, 4, 6, 15, 5], [110, 5, 7, 18, 4], [120, 5, 8, 20, 3], [130, 6, 9, 22, 2], [140, 6, 10, 25, 1]]) y = np.array([150, 180, 210, 240, 270, 300, 330, 360, 390, 420]) # 普通线性回归 ols = LinearRegression() ols.fit(X, y) print("普通线性回归权重:", np.round(ols.coef_, 2)) # 岭回归 ridge = Ridge(alpha=1.0) ridge.fit(X, y) print("岭回归权重: ", np.round(ridge.coef_, 2)) # Lasso 回归 lasso = Lasso(alpha=0.1) lasso.fit(X, y) print("Lasso 权重: ", np.round(lasso.coef_, 2))

删除冗余特征的例子:

import numpy as np import pandas as pd from sklearn.linear_model import Lasso, LassoCV, LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error np.random.seed(42) # ========== 1. 生成数据 ========== n = 200 X = pd.DataFrame({ "面积": np.random.rand(n) * 100 + 50, "房间数": np.random.randint(1, 6, n), "房龄": np.random.randint(0, 30, n), "楼层": np.random.randint(1, 30, n), "距离地铁": np.random.rand(n) * 10, "朝向": np.random.randint(0, 4, n), "装修年限": np.random.randint(0, 10, n), "绿化率": np.random.rand(n), "物业费": np.random.rand(n) * 5, "编号": np.arange(n), }) y = (3.0 * X["面积"] + 5.0 * X["房间数"] - 1.0 * X["房龄"] + 0.5 * X["楼层"] - 2.0 * X["距离地铁"] + np.random.randn(n) * 5) print("=" * 50) print("原始特征数:", X.shape[1]) # ========== 2. 手动粗筛:10 -> 8 ========== X_8 = X.drop(columns=["编号", "朝向"]) print("粗筛后特征数:", X_8.shape[1]) # ========== 3. Lasso 细筛 ========== X_train, X_test, y_train, y_test = train_test_split( X_8, y, test_size=0.2, random_state=42 ) lasso_cv = LassoCV(alphas=np.logspace(-3, 2, 50), cv=5, random_state=42) lasso_cv.fit(X_train, y_train) lasso = Lasso(alpha=lasso_cv.alpha_).fit(X_train, y_train) print("=" * 50) print("Lasso 最优 alpha:", lasso_cv.alpha_) print(pd.DataFrame({"特征": X_8.columns, "权重": lasso.coef_})) # ========== 4. 手动删除权重为 0 的特征 ========== selected_idx = np.where(lasso.coef_ != 0)[0] selected_features = X_8.columns[selected_idx] X_selected = X_8[selected_features] print("=" * 50) print("Lasso 保留特征:", list(selected_features)) print("最终特征数:", X_selected.shape[1]) # ========== 5. 重新训练最终模型 ========== X_train_sel, X_test_sel, y_train_sel, y_test_sel = train_test_split( X_selected, y, test_size=0.2, random_state=42 ) final_model = LinearRegression().fit(X_train_sel, y_train_sel) print("=" * 50) print("最终模型权重:") print(pd.DataFrame({"特征": selected_features, "权重": final_model.coef_})) print("偏置:", final_model.intercept_) # ========== 6. 评估 ========== mse_final = mean_squared_error(y_test_sel, final_model.predict(X_test_sel)) print("=" * 50) print(f"最终模型测试集 MSE: {mse_final:.4f}")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 22:17:15

避坑指南:茶山东莞网站建设实战案例拆解,省钱不踩雷

避坑指南:茶山东莞网站建设实战案例拆解,省钱不踩雷 找东莞建站公司怕被坑高价?别慌,看完这篇茶山东莞建设站的实战案例,你心里就有底了。 很多老板一上来就问:“做个网站多少钱?” 销售立刻报价:“基础版3980,标准版6980,高端定制19800起。”…

作者头像 李华
网站建设 2026/9/27 22:16:58

西安网站制作一般多少钱?从零搭建避坑全解析

西安网站制作一般多少钱?从零搭建避坑全解析 很多刚接手项目的朋友,一听到“建站”俩字就头大,特别是面对那套繁琐的 备案流程一头雾水 。不知道材料怎么填,不知道服务器选哪家,更不知道找外包到底该花多少冤枉钱。其实,想搞清楚 西安网站制作一般多少钱…

作者头像 李华
网站建设 2026/9/27 22:16:56

建筑工程网上备案流程完整流程详解

建筑工程网上备案流程完整流程详解 昨天半夜被电话叫醒,运维群炸了,说公司官网突然满屏乱码,还挂着非法广告。点开一看,后台日志全是陌生的IP在疯狂扫端口,服务器被植入了后门脚本。那一刻我才真切身体会到, 网站被黑挂马不知道怎么办 ,比什么都让人崩溃。…

作者头像 李华
网站建设 2026/9/27 22:16:54

3个方案对比评测:WordPress自动识别网页,小白也能搞定的建站实录

3个方案对比评测:WordPress自动识别网页,小白也能搞定的建站实录 想做网站却完全不懂代码?别慌,我也是从这坑里爬出来的。很多人以为搞个自动识别功能的网站必须找外包,报价还得好几万。其实,只要选对工具,自己就能搞定。今天咱们不整虚的,直接拿 WordPress自动识别网页 这个核心需求做…

作者头像 李华
网站建设 2026/9/27 22:16:44

别再瞎折腾了,CMS系统创建静态网站怎么选才能真带来流量

别再瞎折腾了,CMS系统创建静态网站怎么选才能真带来流量 网站做好了没人访问,这是最让人崩溃的时刻。你花了大半个月,甚至几个月,敲代码、调UI、写文案,终于把站点上线了。结果呢?打开百度,搜你的名字,根本找不到。流量曲线平得像心电图停跳一样。这时候你才慌了,开始怀疑人生,是不是我的SEO没做对?还是…

作者头像 李华