(本页面正在施工中)

(若代码不能正常高亮,刷新页面即可~)

本页面讲最基本的机器学习入门内容~
基于Python的pandas库进行

注意:在运行本内容代码之前,你需要做好以下准备,选择其中一个方法即可:

方法一(本地运行):此内容需要你先下好Anaconda,通过anaconda prompt架构jupyter notebook服务器,并在本地服务器中放置好你的数据集(抑或是使用pycharm,vc等一切可以运行python的编辑器)。

方法二(云端):使用Google Colab(https://colab.research.google.com/)进行云端编程,此种方法需要你会科学上网。然后,本方法请确保将你的数据集上传至云端中。

用到的数据集为机器学习的经典案例titanic。
点击此处下载数据集

§1. 准备/处理数据

首先,在读取数据后,对数据内容进行规范化,这对机器学习来说极为重要。列的选择,空缺处理,列格式等问题会影响机器学习的准确度甚至程序能否运行。

In[1]:

# Import pandas library/导入pandas库
import pandas as pd

# Read csv data file/读取数据(本地),xxx/titanic.csv部分请修改为你的数据集存储位置
df = pd.read_csv('xxx/titanic.csv')

# View the number of rows and columns/看行数和列数
df.shape

Out[1]:

(887 , 8)

In[2]:

# View the first 5 rows/展示前5行数据
df.head()

Out[2]:

我们希望属性能够较好地完成预测任务。而身份姓名此类属性与乘客是否生还无关,因此我们可以将其移除。

In[3]:

# 将所有属性进行统一改名
df.columns = ['survived', 'pclass', 'name', 'sex', 'age', 'sibspouse', 'parchild', 'fare']
# 查看改名后的属性
df.columns

Out[3]:

In[4]:

# 删除属性“name”
# axis=1 即删除整列
df = df.drop('name', axis = 1)
df.columns

Out[4]:

In[5]:

# View the data type of each attribute/查看每种属性的数据类型
df.dtypes

Out[5]:

In[6]:

# Convert integer to string: survived/将int类型数据转化为string类型数据(属性survived)
df['survived'] = df['survived'].astype(str)
df['survived'].describe()

Out[6]:

In[7]:

df['survived'].value_counts()

Out[7]:

实例分布有细微不均衡,0(545)的数量比1(342)多。

In[8]:

# Convert integer to string: pclass/将pclass列数据由int转化为string
df['pclass'] = df['pclass'].astype(str)
# Convert integer to string: sex/将sex列数据由int转化为string
df['sex'] = df['sex'].astype(str)
df.dtypes

Out[8]:

许多学习算法需要数值型输入数据,所以我们要将字符列转化为数值列。sex列在本数据集中为字符串型数据,我们可以将两个性别映射到0和1上,这称之为标签编码。我们可以用sklearn库中的label Encoder方法来进行标签编码。

In[9]:

# 导包导方法
from sklearn import preprocessing
# 创建LabelEncoder方法
le = preprocessing.LabelEncoder()
# 将sex列的字符串映射为数字型数据
df['sex'] = le.fit_transform(df['sex'])
df.head()

Out[9]:

§2. 训练/验证KNN分类器

终于到了机器学习的步骤。

首先我们需要指示出训练目标列(验证训练结果的列)以及特征列(用于预测的数据列)

In[10]:

# Indicate the target column/指示目标列
target = df['survived']
# Indicate the columns that will serve as features/指示特征列
features = df.drop('survived', axis = 1)

然后,我们将数据集分成三块:训练集、验证集和测试集。

In[11]:

# Split data into train, validation and test sets/将数据集分成训练、验证、测试三集
# Import train_test_split function/导包呀导包
from sklearn.model_selection import train_test_split
# Split the dataset into training + development set and test set/将数据集先分解为训练+发展集和测试集
x, x_test, y, y_test = train_test_split(features, target, test_size = 0.2, random_state = 0)
# Split the dataset into training set and development set/将训练+发展集分开成两个部分
x_train, x_dev, y_train, y_dev = train_test_split(x, y, test_size = 0.2, random_state = 10)

test_size的值介于0和1之间,表示分给测试集的数据占整个数据集的比例。random_state,简而言之就是种子,我想玩游戏多的萌妹应该懂种子的意思。如果不明白,可以理解为固定选择了一个随机分开数据的方式,这样可以保证每次训练结果一致。

终于,接下来我们要开始训练模型了。

In[12]:

# Training a KNN model/训练KNN模型
# Import k-nearest neighbor classifier/开导包!
from sklearn.neighbors import KNeighborsClassifier
# Create a KNN classifier with k = 1/创建一个KNN分类器,设最近邻居数量为1
knn = KNeighborsClassifier(n_neighbors = 1)
# Train the model using the training set/使用训练集训练模型
knn.fit(x_train, y_train)

Out[12]:

In[13]:

# Predict the target for the development dataset/预测开发数据集目标
dev_predict = knn.predict(x_dev)
dev_predict

Out[13]:

In[14]:

# Evaluate the knn model on development set/于发展集上验证KNN模型
# Import scikit-learn metrics module for accuracy calculation/导
from sklearn import metrics
# Compute the model accuracy on the development set: How often is the classifier correct?
# 计算开发集上的模型准确率——本分类器的正确率是多少捏?
print("Accuracy: ", metrics.accuracy_score(y_dev, dev_predict))

Out[14]:

故而本分类器的准确率约为70%,也就是说,本次使用机器学习进行训练而得到的模型,其验证正确率就是这么多~

至此,你已经初步完成了一次机器学习,棒棒哒!

 

(待续)