commit f2af7c49f3cc0554e2f6551f45fa6bcd32fa058f Author: haotian <2421912570@qq.com> Date: Wed Feb 5 11:29:05 2025 +0800 完成--线性回归示例 diff --git a/docs/ml.md b/docs/ml.md new file mode 100644 index 0000000..efadbd2 --- /dev/null +++ b/docs/ml.md @@ -0,0 +1,64 @@ +深度学习与机器学习分类 + 1.监督学习: + 分类:将输入数据分配到预定义的类别中,如图像分类,文本分类 + 回归:预测连续值,如房价预测,股票价格预测. + 2.无监督学习: + 聚类:将数据分组,如客户细分,图像分割. + 降维:减少数据维度,如PCA,t-SNE + 3.半监督学习:结合少量标注数据和大量未标注数据进行训练. + 4.强化学习:通过与环境交互学习策略,如游戏AI,机器人控制. + 5.生成模型: + 生成对抗网络(GANS):生成逼真数据,如图像生成,视频生成. + 扩散模型:同上 + 自编码器:学习数据表示,用于数据压缩,去噪. + +机器学习主要算法 + 1.监督学习算法 + 1.线性回归:用于回归任务,通过线性方程预测连续值. + 2.逻辑回归:用于分类任务,通过逻辑函数预测类别概率 + 3.支持向量机(SVM):用于分类和回归,通过找到最优超平面分离数据. + 4.决策树:用于分类和回归,通过树结构进行决策. + 5.随机森林:集成学习方法,通过多个决策树提高性能. + 6.K近邻(KNN):基于距离度量,通过最近邻样本进行预测. + 7.朴素贝叶斯:基于贝叶斯定理,适用于文本分类等任务. + 8.AdaBoost:集成学习算法,通过加权多个若分类器提高性能. + 9.梯度提升树(GBM):通过逐步优化残差进行预测. + 10.XGBoost:GBM的高效实现. + 11.LightGBM:另一种高效的GBM实现,适用于大规模数据. + 2.无监督学习 + 1.K均值聚类 + 2.层次聚类: + 3.主成分分析(PCA):用于降维,通过线性变换保留主要特征 + 4.t-SNE:用于高维数据可视化,保留局部结构. + 5.自组织映射(SOM):通过神经网络进行数据降维和可视化. + 6.高斯混合模型(GMM):通过多个高斯分布拟合数据. + +机器学习算法具体介绍 + 1.线性回归: 用于建模输入变量(自变量)与输出变量(因变量)之间线性关系的统计方法. + 原理: + y=β0​+β1​x1​+β2​x2​+⋯+βn​xn​+ϵ + + ϵ误差项,表示模型未能解释的部分 + 目标: 最小化误差项的平方和(最小二乘法)来估计系数 + L(β)=i=1∑m​(yi​−(β0​+β1​xi1​+β2​xi2​+⋯+βn​xin​))2 + 适用场景: + 1.连续值预测: + 房价预测 + 股票价格预测 + 销售额预测:根据广告投入,市场条件等预测销售额. + 2.因果关系分析: + 经济学:分析政策变化对经济指标的影响. + 医学:研究药物剂量对治疗效果的影响. + 3.简单建模: + 初步分析:在复杂模型之前,使用线性回归进行初步数据分析. + 解释性模型:模型回归模型易于解释,适合需要透明度的场景 + + 优缺点: + 优点: + 简单易懂:模型结构简单,易于理解和实现。 + 计算高效:训练和预测速度快,适用于大规模数据。 + 解释性强:系数直接反映自变量对因变量的影响。 + 缺点: + 线性假设:假设自变量和因变量之间存在线性关系,可能不适用于非线性数据。 + 对异常值敏感:异常值可能对模型产生较大影响。 + 多重共线性:自变量之间高度相关时,模型表现可能不佳。 \ No newline at end of file diff --git a/linear.py b/linear.py new file mode 100644 index 0000000..5018f74 --- /dev/null +++ b/linear.py @@ -0,0 +1,44 @@ +''' + 线性回归 +''' + +import numpy as np +import matplotlib.pyplot as plt +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error, r2_score + +# 生成示例数据 +# 假设我们有一些数据点 (X, y),其中 X 是输入特征,y 是目标变量 +# 设置随机种子, 不然每次运行程序结果都不一样 +np.random.seed(0) +X = 2 * np.random.rand(100, 1) +y = 4 + 3 * X + np.random.randn(100, 1) + +# 将数据分为训练集和测试集 +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) + +# 创建线性回归模型 +model = LinearRegression() + +# 训练模型 +model.fit(X_train, y_train) + +# 使用模型进行预测 +y_pred = model.predict(X_test) + +# 评估模型 +mse = mean_squared_error(y_test, y_pred) +r2 = r2_score(y_test, y_pred) + +print(f"Mean Squared Error: {mse}") +print(f"R^2 Score: {r2}") + +# 可视化结果 +plt.scatter(X_test, y_test, color='black', label='Actual data') +plt.plot(X_test, y_pred, color='blue', linewidth=3, label='Fitted line') +plt.xlabel('X') +plt.ylabel('y') +plt.legend() + +plt.savefig('./output/linear.png') diff --git a/output/linear.png b/output/linear.png new file mode 100644 index 0000000..2b64b36 Binary files /dev/null and b/output/linear.png differ