监督学习算法
一.线性回归算法
监督学习算法是机器学习领域中的一个重要分支,其核心思想是通过已知的输入和输出数据样本(通常被称为训练数据集)来学习一个模型(也称为学习器),然后利用这个模型对未知的数据进行预测或分类。下面是对监督学习算法的更详细解释:
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. (可选)评估模型
// ...
}
}
5.常用模型及应用:
神经网络是一种黑盒模型,能够处理高度非线性的数据,适用于图像识别、语音识别等领域。
支持向量机在高维空间中能够有效地进行数据分类,并适用于小样本情况。
决策树简单易懂,对数据预处理要求较低,常用于天气预测、风险评估等。
总结来说,监督学习算法通过训练数据集中的输入和输出信息来学习一个模型,然后利用这个模型对未知数据进行预测或分类。它依赖于已知的数据标签,并广泛应用于各种机器学习任务中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端