机器学习入门指南

机器学习是人工智能和数据科学领域的一个重要分支,它通过训练算法来预测输出,基于过去的数据。输入数据可以不断变化,算法也可以相应地进行微调以提供更好的输出。机器学习的应用非常广泛,例如谷歌使用它来预测自然灾害,如洪水。在政治领域,如何分析选民的人口统计数据也是一个常见的应用场景。

机器学习如何工作?

数据是机器学习的关键。数据越多,算法就能更好地学习和微调。对于任何问题的输出,都会有多个因素在起作用,其中一些因素的影响比其他因素大。分析并应用所有这些发现是机器学习问题的一部分。从数学上讲,机器学习将问题的输出转换为多个输入因素的函数。

Y = f(x)

其中,Y 是预测输出,x 是作为输入的多个因素。

典型的机器学习工作流程是怎样的?

机器学习应用于问题有一个结构化的方式。这里尝试以图形化的方式展示工作流程,以便更容易地可视化和理解。工作流程是一个循环,一旦从发布的模型中获得了一些洞察,它就会回到漏斗中,作为学习以使输出更好。

数据科学家大约花费60%的时间在数据清洗和组织上。

通过一个例子来了解工作流程

让使用泰坦尼克号幸存者的数据集,并运行基本的工作流程,看看旅行等级、性别、年龄和票价等特征是如何帮助评估生存概率的。

数据可以有多种格式。最简单的是将其保存为csv格式,然后使用pandas加载。

# 让加载并查看数据集的信息 titanicdf = pd.read_csv("data-files/titanic.csv") print(titanicdf.info())

数据集包含1309条记录,14个列,包括乘客等级、生存状态、姓名、性别、年龄等信息。

并非捕获的所有数据都是需要的。将拥有一个包含额外信息的数据超集,这些信息与问题陈述无关。这些数据将作为噪声,因此在开始对它们进行任何机器学习算法处理之前,最好先清理数据集。

# 删除认为不相关的列 titanicdf.drop(['embarked', 'body', 'boat', 'name', 'cabin', 'home.dest', 'ticket', 'sibsp', 'parch'], axis='columns', inplace=True)

数据分析有多种方式。根据问题陈述,需要了解讨论中数据的一般趋势。统计学和概率分布知识在这里有帮助。为了获得洞察以更好地理解相关性和模式,数据可视化洞察很有帮助。

# 让看看是否有任何高度相关的数据 import seaborn as sns sns.pairplot(titanicdf)

从图表中看,似乎没有立即需要删除的内容。

为了更容易地处理数据,一旦它们被转换为数字(从字符串),这有助于将它们输入到各种统计公式中以获得更多洞察。

# 将类别转换为数字 titanicdf = pd.get_dummies(titanicdf, columns=['pclass']) # 将性别转换为数字 from sklearn import preprocessing le = preprocessing.LabelEncoder() titanicdf['sex'] = le.fit_transform(titanicdf.sex)

总会有一些缺失数据或异常值。在缺失数据上运行算法可能会导致不一致的结果或算法失败。根据上下文,可以选择删除它们或用适当的值填充/替换它们。

# 用平均年龄填充缺失的年龄值 titanicdf.loc[titanicdf['age'].isnull(), 'age'] = titanicdf['age'].mean() # 同样的方法可以用于票价,但将使用另一种方式 titanicdf.dropna(inplace=True)

有时,上下文中的各种数据具有不同的尺度。在这种情况下,如果数据没有归一化,算法可能会对具有更高幅度的数据产生偏见。例如,特征A的值范围是0-10,特征B的范围是0-10000。在这种情况下,即使A的幅度变化很小也可能产生差异,但如果数据没有归一化,特征B将更多地影响结果(这可能不是实际情况)。

# 将每列缩放到0均值和1标准差 from sklearn import preprocessing X = titanicdf.drop(['survived'], axis=1) y = titanicdf['survived'] X_scaled = preprocessing.scale(X)

最好将数据集分成两个不等的部分。较大的部分用于训练算法,然后较小的部分用于测试训练过的算法。这样,算法就不会仅仅对输入数据产生偏见,测试数据的结果可以提供更好的画面。

# 将数据集分成训练集和测试集 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_scaled, y)

一旦按照需求准备好了训练数据集,就可以应用机器学习算法,找到最适合的模型。

# 现在,选择任意一个分类器 - KN from sklearn.neighbors import KNeighborsClassifier dtc = KNeighborsClassifier(n_neighbors=5) dtc.fit(X_train, y_train)

为了验证模型,使用测试数据集,将模型预测的值与实际数据进行比较,这有助于了解机器学习模型的准确性。

# 验证模型 import sklearn.metrics as met pred_knc = dtc.predict(X_test) print("Nearest neighbors: %.3f" % (met.accuracy_score(y_test, pred_knc)))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485