(本页面正在施工中)
(若代码不能正常高亮,刷新页面即可~)
本页面讲最基本的机器学习入门内容~
基于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%,也就是说,本次使用机器学习进行训练而得到的模型,其验证正确率就是这么多~
至此,你已经初步完成了一次机器学习,棒棒哒!
(待续)
文章有(1)条网友点评
本文内容比较赶,难免有疏漏错误,若有任何bug或不懂的地方请及时和窝讲哦~