本节主要记录 在选择模型上的思考和参考答案,以及对应的实战操作。

知识点

(一)知识点学习

1. 逻辑回归基础原理

sigmoid函数的作用:

  • 会将极端值的影响尽可能降低。
  • 函数输出是在 0-1 之间
逻辑回归的优点和缺点:

优点:

    1. 计算概率
    1. 能减少极端值的影响

缺点:

    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入门机器学习 经典算法与应用

把【晋升答辩】当做【研究生毕业论文】来做。