监督学习算法

一.线性回归算法
监督学习算法是机器学习领域中的一个重要分支,其核心思想是通过已知的输入和输出数据样本(通常被称为训练数据集)来学习一个模型(也称为学习器),然后利用这个模型对未知的数据进行预测或分类。下面是对监督学习算法的更详细解释:

1.基本概念:
监督学习算法是建立在有标记数据之上的,其中输入和输出变量都是已知的。
学习器的输出必须与人工给定的真实结果一致。
监督学习通常可分为两类:回归问题和分类问题。

2.分类问题:
目标是将数据样本映射到不同的类别中,每个数据样本对应一个标签。
常见的分类算法包括朴素贝叶斯分类器、支持向量机(SVM)、决策树、神经网络等。
朴素贝叶斯分类器假设了数据集属性之间是相互独立的,常用于文本分类。
决策树算法采用树形结构,使用层层推理来实现最终的分类。
支持向量机通过寻找分类平面并将不同的数据分离开来,适用于高维和小样本情况。

3.回归问题:
目标是找到一个函数,从输入数据中预测连续数值的输出值。
常见的回归算法包括线性回归、多项式回归、岭回归、Lasso回归等。
线性回归是使用一个超平面拟合数据集的常用算法,适用于数据量大的情况。

简单的线性回归类的实现,它包含了计算线性回归模型系数(斜率和截距)的方法
using System;  
using System.Linq;  
  
public class LinearRegression  
{  
    // 线性回归模型的参数  
    public double Slope { get; private set; }  
    public double Intercept { get; private set; }  
  
    // 拟合线性回归模型  
    public void Fit(double[] x, double[] y)  
    {  
        if (x == null || y == null || x.Length != y.Length || x.Length == 0)  
        {  
            throw new ArgumentException("Input arrays must be non-null, same length, and non-empty");  
        }  
  
        int n = x.Length;  
  
        // 计算x和y的平均值  
        double xMean = x.Average();  
        double yMean = y.Average();  
  
        // 计算x和y的协方差以及x的方差  
        double xyCovariance = 0.0;  
        double xxVariance = 0.0;  
        for (int i = 0; i < n; i++)  
        {  
            xyCovariance += (x[i] - xMean) * (y[i] - yMean);  
            xxVariance += Math.Pow(x[i] - xMean, 2);  
        }  
  
        // 使用最小二乘法计算斜率  
        Slope = xyCovariance / xxVariance;  
  
        // 计算截距  
        Intercept = yMean - Slope * xMean;  
    }  
  
    // 根据模型参数预测新的y值  
    public double Predict(double x)  
    {  
        return Slope * x + Intercept;  
    }  
}  

class Program  
{  
    static void Main()  
    {  
        double[] xData = { 1, 2, 3, 4, 5 };  
        double[] yData = { 2, 3, 5, 7, 11 };  
  
        LinearRegression lr = new LinearRegression();  
        lr.Fit(xData, yData);  
  
        Console.WriteLine($"Slope: {lr.Slope}, Intercept: {lr.Intercept}");  
  
        // 预测x=6时的y值  
        double predictedY = lr.Predict(6);  
        Console.WriteLine($"Predicted y value for x=6: {predictedY}");  
    }  
}


逻辑回归的模型
点击查看代码
using Microsoft.ML;  
using Microsoft.ML.Data;  
using Microsoft.ML.Trainers;  
using System;  
  
// 定义输入数据的类  
public class SampleData  
{  
    [LoadColumn(0)]  
    public float[] Features { get; set; }  
  
    [LoadColumn(1)]  
    [ColumnName("Label")]  
    public bool Sentiment { get; set; } // 假设这是一个二元分类问题,如正面/负面情感  
}  
  
// 定义模型的输入和输出类  
public class SentimentPrediction  
{  
    [ColumnName("Score")]  
    public float[] PredictedSentiment { get; set; }  
}  
  
class Program  
{  
    static void Main(string[] args)  
    {  
        // 1. 加载数据(这里只是示例,你需要从文件或数据库加载实际数据)  
        // ...  
  
        // 2. 初始化MLContext  
        MLContext mlContext = new MLContext();  
  
        // 3. 加载数据到IDataView  
        // 假设我们已经有了一个IEnumerable<SampleData>叫做samples,这里用示例代替  
        var samples = new List<SampleData>  
        {  
            // 填充你的数据...  
            new SampleData { Features = new float[] { 1.0f, 2.0f, 3.0f }, Sentiment = true },  
            new SampleData { Features = new float[] { 2.0f, 3.0f, 4.0f }, Sentiment = false },  
            // ...  
        };  
  
        var dataView = mlContext.Data.LoadFromEnumerable(samples);  
  
        // 4. 定义训练管道  
        var pipeline = mlContext.Transforms.Concatenate("Features", "Features")  
            .Append(mlContext.BinaryClassification.Trainers.SdcaLogisticRegression());  
  
        // 5. 训练模型  
        var model = pipeline.Fit(dataView);  
  
        // 6. 使用模型进行预测  
        // 假设我们有一个要预测的样本  
        var testSample = new SampleData { Features = new float[] { 2.5f, 3.5f, 3.0f } };  
        var predictionEngine = mlContext.Model.CreatePredictionEngine<SampleData, SentimentPrediction>(model);  
        var prediction = predictionEngine.Predict(testSample);  
  
        // 输出预测结果  
        Console.WriteLine($"Predicted Sentiment: {prediction.PredictedSentiment[0] > 0.5}"); // 根据分数决定是否为正面情感  
  
        // 7. (可选)评估模型  
        // ...  
    }  
}
4.算法特点: 监督学习算法是有指导性的学习方法,依赖于训练数据集中的标签信息。 监督学习算法被广泛应用于自然语言处理、计算机视觉、音频识别、推荐系统等领域。

5.常用模型及应用:
神经网络是一种黑盒模型,能够处理高度非线性的数据,适用于图像识别、语音识别等领域。
支持向量机在高维空间中能够有效地进行数据分类,并适用于小样本情况。
决策树简单易懂,对数据预处理要求较低,常用于天气预测、风险评估等。

总结来说,监督学习算法通过训练数据集中的输入和输出信息来学习一个模型,然后利用这个模型对未知数据进行预测或分类。它依赖于已知的数据标签,并广泛应用于各种机器学习任务中。

posted @   爱吃饭团  阅读(202)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示