从开发者到机器学习14天,半个月从入门到进阶

Python是应用机器学习发展最快的平台之一。我们开始吧。

这个迷你课程是给谁的?

在我们开始之前,让我们确保你在正确的地方。

下面的清单提供了一些关于这门课程是为谁设计的一般指导方针。

不要惊慌失措,如果你不完全匹配这些点,你可能只需要在一个或另一个领域,以跟上。

知道如何编写一些代码的开发人员。这意味着,一旦您了解了基本语法,学习Python这样的新编程语言就不是什么大事了。这并不意味着你是一个向导程序员,只是你可以遵循一个基本的C类语言,不费多大力气。

了解一些机器学习的开发人员。这意味着您了解机器学习的基础知识,如交叉验证、一些算法和偏差-方差权衡。这并不意味着你是一个机器学习博士,只是你知道地标或知道在哪里查找它们。

这门迷你课程既不是Python的教科书,也不是机器学习的教科书.

它将把您从一个了解一个小机器学习的开发人员带到一个可以使用Python生态系统(一个专业机器学习的新兴平台)获得结果的开发人员。

在Python机器学习方面需要帮助吗?

使用我的免费2周课程,并发现数据准备,算法和更多(与代码)。

点击关注三连,并获得免费的PDF电子书版本的课程.

现在开始你的免费迷你课程!

迷你课程概述

这门迷你课程分为14节课。

您可以每天完成一堂课(推荐),也可以在一天内完成所有课程(硬核心!)这真的取决于你的时间和你的热情水平。

下面是用Python进行机器学习的14个经验教训:

@[TOC](下面是用Python进行机器学习的14个经验教训)

# 第1课下载并安装Python和SciPy生态系统

第1课:下载和安装Python和SciPy

在访问该平台之前,您无法开始使用Python进行机器学习。

今天的课程很简单,您必须下载并在计算机上安装Python3.6平台。

参观Python主页并为您的操作系统(Linux、OSX或Windows)下载Python。在计算机上安装Python。您可能需要使用特定于平台的包管理器,例如OSX上的macports或RedHatLinux上的yum。

您还需要安装SciPy平台还有科学知识图书馆。我建议您使用与安装Python相同的方法。

你可以同时安装所有的东西(容易得多)与Anaconda。推荐初学者使用。

第一次通过在命令行输入“python”启动Python。

使用下面的代码检查您需要的所有版本:

```python
# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))
```

如果有任何错误,停止。现在是修复它们的时候了。

# 第2课使用Python、NumPy、Matplotlib和Pandas

您需要能够读写基本的Python脚本。

作为一名开发人员,您可以非常迅速地学习新的编程语言。Python区分大小写,对注释使用散列(#),使用空格表示代码块(空格重要)。

今天的任务是在Python交互环境中练习Python编程语言的基本语法和重要的SciPy数据结构。

练习分配,在Python中使用列表和流控制。

练习使用NumPy数组。

练习在Matplotlib中创建简单的情节。

练习使用Pandas系列和DataFrame。

例如,下面是创建Pandas的一个简单示例DataFrame.

```python
# dataframe
import numpy
import pandas
myarray = numpy.array([[1, 2, 3], [4, 5, 6]])
rownames = ['a', 'b']
colnames = ['one', 'two', 'three']
mydataframe = pandas.DataFrame(myarray, index=rownames, columns=colnames)
print(mydataframe)
```

# 第3课从CSV加载数据

机器学习算法需要数据。您可以从CSV文件中加载自己的数据,但是当您开始使用Python进行机器学习时,您应该在标准机器学习数据集上进行练习。

今天课程的任务是轻松地将数据加载到Python中,并查找和加载标准机器学习数据集。

有许多优秀的csv格式的标准机器学习数据集,您可以在UCI机器学习库.

使用CSV.Reader()在标准图书馆里。

使用NumPy和Numpy.loadtxt()功能。

使用Pandas和Pandas.read_csv()功能。

首先,下面是一个片段,它将使用Pandas直接从UCI机器学习库加载Pima印第安人糖尿病发病数据集。

```python
# Load CSV using Pandas from URL
import pandas
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names)
print(data.shape)
```

做得好,做得这么远!别松劲。

到目前为止有什么问题吗?在评论中问一问。

# 第4课用描述性统计方法了解数据

一旦将数据加载到Python中,就需要能够理解它。

你越能理解你的数据,你就能建立更好和更准确的模型。理解数据的第一步是使用描述性统计信息。

今天,您的课程是学习如何使用描述性统计来理解您的数据。我建议使用PandasDataFrame上提供的助手函数。

使用总目()函数来查看前几行。

使用形形财产。

方法查看每个属性的数据类型。D型财产。

使用描述()功能。

使用Corr()功能。

下面的示例加载PIMA印度人糖尿病发病数据集,并总结每个属性的分布情况。

```python
# Statistical Summary
import pandas
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names)
description = data.describe()
print(description)
```

试试看!

# 第5课用可视化理解数据

继续从昨天的教训,你必须花时间来更好地理解你的数据。

提高对数据的理解的第二种方法是使用数据可视化技术(例如绘图)。

今天,您的课程是学习如何使用Python中的绘图来理解单独的属性及其交互。同样,我建议使用在PandasDataFrame上提供的助手函数。

使用赫斯特()函数创建每个属性的直方图。

使用情节(种类=‘方框’)函数创建每个属性的框和须图。

使用散点阵()函数创建所有属性的成对散点图。

例如,下面的代码段将加载糖尿病数据集并创建数据集的散点图矩阵。

```python
# Scatter Plot Matrix
import matplotlib.pyplot as plt
import pandas
from pandas.plotting import scatter_matrix
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pandas.read_csv(url, names=names)
scatter_matrix(data)
plt.show()
```
从开发者到机器学习14天,半个月从入门到进阶

样本散点图矩阵

# 第6课通过预处理数据为建模做准备

您的原始数据可能不会被设置为最佳的建模形状。

有时,您需要对数据进行预处理,以便向建模算法最好地展示数据中问题的固有结构。在今天的课程中,您将使用Scikit-Learning提供的预处理功能。

Scikit-Learning库提供了两个转换数据的标准习语。每一种变换在不同的情况下都是有用的:拟合和多重变换以及组合拟合和变换.

您可以使用许多技术来为建模准备数据。例如,尝试以下一些

使用标度和中心选项将数值数据标准化(例如0的平均值和1的标准差)。

使用Range选项将数值数据标准化(例如,范围为0-1)。

探索更高级的特性工程,如Binify。

例如,下面的片段加载Pima印度人的糖尿病数据集,计算标准化数据所需的参数,然后创建输入数据的标准化副本。

```python
# Standardize data (0 mean, 1 stdev)
from sklearn.preprocessing import StandardScaler
import pandas
import numpy
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
# separate array into input and output components
X = array[:,0:8]
Y = array[:,8]
scaler = StandardScaler().fit(X)
rescaledX = scaler.transform(X)
# summarize transformed data
numpy.set_printoptions(precision=3)
print(rescaledX[0:5,:])
```

# 第7课算法评估采用重采样方法

用于训练机器学习算法的数据集称为训练数据集。用于训练算法的数据集不能用于对新数据模型的准确性进行可靠的估计。这是一个大问题,因为创建模型的整个想法是对新数据进行预测。

您可以使用称为重采样方法的统计方法将您的训练数据集分割成子集,其中一些用于训练模型,另一些用于对未见数据进行模型的精度估计。

今天课程的目标是练习使用Scikit中可用的不同重采样方法,例如:

将数据集拆分为培训集和测试集。

用k次交叉验证估计算法的精度.

估计一种算法的精度,使用的是一次交叉验证。

下面的片段使用Scikit--学习使用10倍交叉验证来估计Pima印度人糖尿病发病数据的Logistic回归算法的准确性。

```python
# Evaluate using Cross Validation
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
kfold = KFold(n_splits=10, random_state=7)
model = LogisticRegression(solver='liblinear')
results = cross_val_score(model, X, Y, cv=kfold)
print("Accuracy: %.3f%% (%.3f%%)" % (results.mean()*100.0, results.std()*100.0))
```

你的准确度是多少?在评论中让我知道。

你知道这是中途点吗?9~10成熟!

# 第8课算法评估度量

您可以使用许多不同的度量来评估数据集中的机器学习算法的技能。

您可以通过交叉验证交叉Val_Score()函数和默认值可以用于回归和分类问题。今天的课程的目标是练习使用Scikit-Learning包中提供的不同算法性能指标。

练习在分类问题上使用准确性和LogLoss度量。

练习生成混淆矩阵和分类报告。

在回归问题上使用RMSE和RSquared度量。

下面的片段演示了在Pima印第安人糖尿病数据集上计算LogLoss度量。

```python
# Cross Validation Classification LogLoss
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
kfold = KFold(n_splits=10, random_state=7)
model = LogisticRegression(solver='liblinear')
scoring = 'neg_log_loss'
results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print("Logloss: %.3f (%.3f)") % (results.mean(), results.std())
```

你丢了什么木头?在评论中让我知道。

# 第9课抽查算法

您不可能事先知道哪种算法会对您的数据执行得最好。

你必须通过试错的过程来发现它。我称之为抽查算法。Scikit-Learning库为许多机器学习算法和工具提供了一个接口,以比较这些算法的估计精度。

在本课中,您必须练习点检查不同的机器学习算法。

对数据集上的线性算法进行抽查(例如线性回归、Logistic回归和线性判别分析)。

对数据集上的一些非线性算法(如KNN、SVM和CART)进行抽查.

对数据集上一些复杂的集成算法(如随机森林和随机梯度增强)进行抽查。

例如,SPOT下面的代码片段--检查波士顿House Price数据集上的K-最近邻算法。

```python
# KNN Regression
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsRegressor
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
kfold = KFold(n_splits=10, random_state=7)
model = KNeighborsRegressor()
scoring = 'neg_mean_squared_error'
results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())
```

你得到了什么均方误差?在评论中让我知道。

# 第10课模式比较和选择

现在您已经知道了如何在数据集中检查机器学习算法,您需要知道如何比较不同算法的估计性能并选择最佳模型。

在今天的课程中,您将练习将Python中的机器学习算法的准确性与Scikit-Learning进行比较。

在数据集中比较线性算法。

比较数据集上的非线性算法。

比较相同算法的不同配置。

创建比较算法的结果图。

下面的例子比较Logistic回归和线性判别分析在PIMA印度人糖尿病发病数据集上的相互关系。

```python
# Compare Algorithms
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
# prepare models
models = []
models.append(('LR', LogisticRegression(solver='liblinear')))
models.append(('LDA', LinearDiscriminantAnalysis()))
# evaluate each model in turn
results = []
names = []
scoring = 'accuracy'
for name, model in models:
kfold = KFold(n_splits=10, random_state=7)
cv_results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
```

哪种算法取得了较好的效果?你能做得更好吗?在评论中让我知道。

# 第11课通过算法调整提高精度。

一旦您在数据集上找到了一个或两个性能良好的算法,您可能希望提高这些模型的性能。

提高算法性能的一种方法是将其参数调优到特定的数据集。

Scikit-Learning库提供了两种方法来搜索机器学习算法的参数组合。你今天课的目标是练习每一门课。

使用指定的网格搜索优化算法的参数。

使用随机搜索优化算法的参数。

下面的片段是在Pima印第安人糖尿病发病数据集上使用网格搜索岭回归算法的一个例子。

```python
# Grid Search for Algorithm Tuning
from pandas import read_csv
import numpy
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
alphas = numpy.array([1,0.1,0.01,0.001,0.0001,0])
param_grid = dict(alpha=alphas)
model = Ridge()
grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3)
grid.fit(X, Y)
print(grid.best_score_)
print(grid.best_estimator_.alpha)
```

哪些参数取得了最好的效果?你能做得更好吗?在评论中让我知道。

# 第12课提高集合预测的准确性。

提高模型性能的另一种方法是将来自多个模型的预测结合起来。

一些模型提供了这种能力,例如随机森林的套袋和随机梯度助推。另一种叫做投票的集合可以用来将来自多个不同模型的预测组合在一起。

在今天的课中,您将练习使用集成方法。

练习套袋与随机森林和额外的树木算法。

使用梯度增强机和AdaBoost算法练习增强集合。

通过将来自多个模型的预测组合在一起来练习投票集合。

下面的片段演示了如何在Pima印第安人糖尿病发病数据集上使用随机森林算法(一种打包的决策树集合)。

```python
# Random Forest Classification
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
num_trees = 100
max_features = 3
kfold = KFold(n_splits=10, random_state=7)
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
```

你能设计出更好的合奏吗?在评论中让我知道。

# 第13课最后确定并保存您的模型。

一旦在机器学习问题上找到了一个性能良好的模型,您就需要完成它。

在今天的课程中,您将练习与最后确定模型相关的任务。

练习用你的模型来预测新的数据(在训练和测试中看不见的数据)。

练习保存经过训练的模型,然后重新加载它们。

例如,下面的代码片段展示了如何创建Logistic回归模型,将其保存到文件中,然后稍后加载它,并对未见数据进行预测。

```python
# Save Model Using Pickle
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pickle
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# Fit the model on 67%
model = LogisticRegression(solver='liblinear')
model.fit(X_train, Y_train)
# save the model to disk
filename = 'finalized_model.sav'
pickle.dump(model, open(filename, 'wb'))
 
# some time later...
 
# load the model from disk
loaded_model = pickle.load(open(filename, 'rb'))
result = loaded_model.score(X_test, Y_test)
print(result)
```

# 第14课你好,世界端到端项目。

现在您已经知道如何完成预测建模机器学习问题的每个任务。

在今天的课程中,您需要练习将这些片段放在一起,并通过标准的机器学习数据集进行端到端的操作。

通过虹膜数据集端到端(机器学习的哈罗世界)

这包括以下步骤:

使用描述性统计和可视化来理解您的数据。

对数据进行预处理,以最佳地暴露问题的结构。

使用您自己的测试工具对许多算法进行抽查。

使用算法参数调整来改善结果。

使用集成方法改进结果。

最后确定模型,以便将来使用。

慢慢来,把你的结果记录下来。

你用的是什么型号?你得到了什么结果?在评论中让我知道。

结束!

(看看你走了多远)

你成功了。9~10成熟!

花点时间回顾一下你已经走了多远。

您一开始对机器学习很感兴趣,并且强烈希望能够使用Python来实践和应用机器学习。

您可能是第一次下载、安装和启动Python,并开始熟悉该语言的语法。

在一系列的经验教训中,您慢慢地、稳定地学习了如何将预测建模机器的标准任务、学习项目映射到Python平台上。

在通用机器学习任务配方的基础上,您使用Python完成了第一个机器学习问题的端到端学习。

使用标准模板,您收集到的菜谱和经验,您现在能够自己解决新的和不同的预测建模机器学习问题。

不要轻视这一点,你在很短的时间内取得了很大的进步。

如果你也想掌握一门门技能就从现在开始学让自己变得更好吧。通通无偿分享给你们!免费自取!●:关十后台call“学习”●:评论:机器学习。

展开阅读全文

页面更新:2024-04-21

标签:进阶   机器   组合   度量   建模   开发者   算法   函数   片段   糖尿病   入门   模型   加载   参数   课程   标准   方法   数据   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top