本节主要记录 在选择模型上的思考和参考答案,以及对应的实战操作。
知识点
(一)知识点学习
1. 逻辑回归基础原理
sigmoid函数的作用:
- 会将极端值的影响尽可能降低。
- 函数输出是在 0-1 之间
逻辑回归的优点和缺点:
优点:
- 计算概率
- 能减少极端值的影响
缺点:
- 只适合线性分布
非线性模型用逻辑回归,还不如自己看着猜。
(二)Chat with ChatGPT
1. 如何用iOS实现逻辑回归模型?
逻辑回归是一种机器学习算法,它可以用来预测二元输出结果(如是/否)。在 iOS 平台上,您可以使用 Core ML 框架来实现逻辑回归模型。
Core ML 是一个由 Apple 提供的机器学习框架,它提供了一组预定义的机器学习模型,包括逻辑回归模型。您可以使用 Core ML 框架来加载一个逻辑回归模型,并使用它来预测新样本的结果。
首先,您需要在 Xcode 中创建一个新的 iOS 应用项目。然后,您需要准备一个训练好的逻辑回归模型文件。您可以使用任意机器学习工具来训练一个逻辑回归模型,例如 scikit-learn 或 TensorFlow。
接下来,您需要将该模型文件添加到您的 iOS 应用项目中。您可以将模型文件放在项目的根目录下,并在 Xcode 中将它添加到项目的文件列表中。
接着,您需要导入 Core ML 框架,并使用它来加载逻辑回归模型。首先,在项目的文件列表中打开您的应用程序代码文件,并在代码头部添加以下导入语句:
import CoreML
您需要创建一个 MLModel 对象,并使用它来加载逻辑回归模型。您可以使用以下代码来完成这一步:
guard let modelURL = Bundle.main.url(forResource: "LogisticRegression", withExtension: "mlmodel") else {
fatalError("Failed to find model file.")
}
let model = try MLModel(contentsOf: modelURL)
我们将创建的 MLFeatureValue 对象添加到一个字典中,并使用 MLDictionaryFeatureProvider 构造函数来创建一个 MLFeatureProvider 对象。最后,我们使用 MLModel 对象的 prediction(from:) 方法来预测新样本的结果。
预测结果将以一个字典的形式返回,包含每个输出特征的名称和值。在本例中,我们可以使用以下代码来访问预测结果:
let result = prediction.output["interested"] as! MLFeatureValue
let interest = result.boolValue
在上面的代码中,我们首先使用预测结果的 output 属性来获取特征值字典,然后使用字典的下标访问该字典中的特征值。在本例中,我们访问的是感兴趣特征的值,它将以 MLFeatureValue 类型的值返回。
2. 用OC实现CoreML-逻辑回归
上面的代码可以使用 Objective-C 语言来实现。您需要在项目的文件列表中打开您的应用程序代码文件,并在代码头部添加以下导入语句:
@import CoreML;
然后,您可以使用类似于以下代码来实现逻辑回归模型:
@import CoreML;
// Load the model.
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"LogisticRegression" withExtension:@"mlmodel"];
NSError *error = nil;
MLModel *model = [MLModel modelWithContentsOfURL:modelURL error:&error];
if (!model) {
NSLog(@"Failed to load model: %@", error);
return;
}
// Create a feature provider.
MLFeatureValue *featureValue = [MLFeatureValue featureValueWithInt64:30];
NSDictionary *featureDict = @{ @"age": featureValue };
MLDictionaryFeatureProvider *featureProvider = [[MLDictionaryFeatureProvider alloc]
initWithDictionary:featureDict];
// Make a prediction.
NSError *predictionError = nil;
MLDictionaryFeatureProvider *prediction = [model predictionFromFeatures:featureProvider error:&predictionError];
if (!prediction) {
NSLog(@"Failed to make a prediction: %@", predictionError);
return;
}
// Get the predicted value.
MLFeatureValue *result = prediction[@"interested"];
BOOL interest = result.boolValue;
// Print the result.
if (interest) {
NSLog(@"The user is interested.");
} else {
NSLog(@"The user is not interested.");
}
在上面的代码中,我们首先加载了一个逻辑回归模型,然后创建了一个表示新样本的特征值的 MLDictionaryFeatureProvider 对象。接着,我们使用 MLModel 的 predictionFromFeatures:error: 方法来预测新样本的结果。
最后,我们使用 prediction 字典中感兴趣特征的值来访问预测结果。我们使用 MLFeatureValue 的 boolValue 属性来访问该特征的值,然后根据预测结果打印一条消息。
3. 你可以给我推荐一个CoreML进行逻辑回归的教程吗?
您可以查看 Apple 官方文档中的 Core ML Guide,它提供了一个详细的教程,教您如何使用 Core ML 实现逻辑回归模型。
在这篇教程中,您将学习如何将逻辑回归模型转换为 Core ML 模型,并使用该模型来预测新样本的结果。
要访问 Core ML Guide,您可以在下面的链接中找到它:
https://developer.apple.com/documentation/coreml/core_ml_api/using_a_logistic_regression_model
您还可以在 YouTube 上搜索“Core ML tutorial”来找到一些视频教程。这些视频教程可能会更加通俗易懂,并且您可以根据自己的需要暂停或重放视频,以便更好地理解每一步操作。
4. 使用机器学习时,怎么判断应该用线性还是非线性模型?
判断应该使用线性模型还是非线性模型主要取决于数据本身的特征。如果数据呈现线性特征,那么线性模型通常比较适用;如果数据呈现非线性特征,那么非线性模型通常比较适用。
如果数据呈现线性特征,那么线性模型可以较好地拟合数据,并能够很好地预测目标变量。通常,线性模型具有较好的可解释性和较低的计算复杂度,并且能够很好地处理大量数据。线性模型包括线性回归、逻辑回归和线性判别分析等。
如果数据呈现非线性特征,那么非线性模型可以比线性模型更好地拟合数据,并能够很好地预测目标变量。非线性模型通常具有较高的计算复杂度和较差的可解释性,并且需要处理更多的超参数。非线性模型包括支持向量机、决策树、神经网络等。
解释性和计算复杂度,并综合考虑多种因素。一般来说,在数据呈现线性特征时应该优先考虑使用线性模型,而在数据呈现非线性特征时应该优先考虑使用非线性模型。
另外,在实际使用机器学习模型时,往往需要对模型进行调参和评估,以便找到一个比较合适的模型。通常,需要通过交叉验证来评估模型的性能,并通过超参数调整来优化模型。这需要有一定的机器学习经验和技巧,因此建议您可以参考一些教程和文献,以便更好地理解和应用机器学习模型。
5. 你给举个例子吗?什么样的数据是线性的,什么样的是非线性的
我们可以举一个例子来说明什么样的数据是线性的,什么样的是非线性的。
假设我们有一个包含两个特征的数据集,特征 $x_1$ 表示人的年龄,特征 $x_2$ 表示人的体重,目标变量 $y$ 表示人的身高。如果数据呈现线性特征,那么身高与年龄和体重的关系可能是这样的:$y = \beta_1 \times x_1 + \beta_2 \times x_2 + \beta_0$,其中 $\beta_1$、$\beta_2$ 和 $\beta_0$ 是模型的参数。这样的模型可以用线性回归或逻辑回归来拟合数据。
如果数据呈现非线性特征,那么身高与年龄和体重的关系可能是这样的:$y = \beta_1 \times x_1^2 + \beta_2 \times x_2^3 + \beta_0$,其中 $\beta_1$、$\beta_2$ 和 $\beta_0$ 是模型的参数。这样的模型可以用非线性模型如支持向量机或神经网络来拟合数据。
从上面的例子可以看出,当数据呈现线性特征时,目标变量与特征之间存在线性关系,那么线性模型通常比较适用;当数据呈现非线性特征时,目标变量与特征之间存在非线性关系,
6. 支持向量机可以解决线性问题吗
支持向量机(Support Vector Machine,SVM)是一种非线性分类模型,它主要用于解决非线性分类问题。支持向量机通过构建一个超平面将样本划分到两个不同的类别中,并且能够最大化两个类别样本间的距离,从而达到最好的分类效果。
支持向量机可以通过添加核函数来解决线性不可分的问题。核函数可以将低维的数据映射到高维的空间中,使得数据变得线性可分。支持向量机的核函数包括线性核、多项式核、高斯核等。
因此,支持向量机可以解决线性不可分的问题,但它并不能直接解决线性可分的问题。如果数据是线性可分的,那么可以直接使用线性模型如线性回归或逻辑回归来解决问题,而无需使用支持向量机。
实战思考
(一)学习思路
我打算先突击完课程,突击之后至少对机器学习概念和流程有了解,不至于到处问。
就看慕课上的这个课程:Python3入门机器学习 经典算法与应用
把【晋升答辩】当做【研究生毕业论文】来做。