python+Mosh网课笔记13 使用Python进行机器学习

太久没写python代码了,学机器学习重新拾起python,笔记比较简陋。

参考:mosh python网课

目录

一、通常的步骤

二、库和工具

三、环境

四、导入数据集

五、准备数据

六、预测-利用决策树

七、衡量模型的准确性

八、模型持久性

[1. 保存模型](#1. 保存模型)

[2. 加载模型](#2. 加载模型)

九、可视化决策树


一、通常的步骤

  1. 导入数据。数据通常以CSV格式存储。
  2. 清洗数据。比如删除重复数据或者不完整的数据。
  3. 把数据拆分成训练集、测试集等。
  4. 创建一个模型。
  5. 训练模型。
  6. 做出预测。
  7. 评估预测效果,对模型进行提升。

二、库和工具

  • Numpy 对处理多维数组很方便
  • Pandas 为数据分析提供了data frame
  • MatPlotLib
  • Scikit-Learn

三、环境

下载配置anaconda环境,这个在csdn上搜其他高赞帖子教程就行。

四、导入数据集

  1. 注册Kaggle账号,我用Google账号注册登录的。搜索Video Game Sales,找到Datasets,选择第一个,投票最多的那个。 下载是一个压缩包,解压,vgsales.csv文件放到代码工程文件夹下。
  2. 我是用的vscode新建.ipynb文件运行,不是直接用的jupyter(因为我之前用过,总是出问题)。vscode需要安装jupyter插件,运行时,遇到了问题 Running cells with '(Python 3.8.20)' requires the ipykernel package.
  3. 已解决,运行该命令即可:pip install ipykernel --upgrade 参考在vscode中运行jupyter时报错_running cells with 'python 3.8.13 ('pythonproject6-CSDN博客
  4. .ipynb文件下运行,数据集加载出来。
python 复制代码
import pandas as pd
df = pd.read_csv('vgsales.csv') #读取csv文件中的数据。
df 
#df.shape 返回数据集的规模  (x,y) x是记录数,y是column数。
#df.describe() 返回generates descriptive statistics 比如count,mean,min,max,
#df.values() 以二维数组的形式返回表中的数据。


6.

五、准备数据

  1. 利用music.csv删除genre列做预测。(这个文件直接搜mosh music.csv就行,github上有,我是在Google浏览器直接搜的。)
  2. 输入集:把genre列删了,只留age和gender列,预测genre列。
  3. 输出集:把genre列存储到y中,作为结果。X和y都准备出来,开始训练模型从X预测y。

六、预测-利用决策树

  1. 导入决策树的包:from sklearn.tree import DecisionTreeClassifier 。先下载这个sklearn包。pip install sklearn时出错了。提示我用pip install scikit-learn,需要挂v。

python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
#决策树。scikit-learn库,这个机器学习库很受欢迎。

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre']) 
#不会修改原始数据集,会创建新数据集。
y =  music_data['genre']

model=DecisionTreeClassifier()
model.fit(X,y)
predictions = model.predict([ [21,1] ,[22,0]])
predictions

要求预测21岁的男生和22岁的女生喜欢的音乐数据,预测结果:

我们再回顾一下music_data,可见预测的数据准确。

直接建立预测准确的模型并不容易,我们可以通过微调模型或者使用其他模型的方式来提升预测准确性。

七、衡量模型的准确性

  • 70%-80%的数据用于训练,另外20%-30%的数据用于测试。
python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
#功能:将数据集分为两组。
from sklearn.metrics import accuracy_score
#计算准确度。

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre']) 
#不会修改原始数据集,会创建新数据集。
y =  music_data['genre']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2) #20%的数据用于测试。
#输入集,输出集。

model=DecisionTreeClassifier()
model.fit(X_train,y_train)
predictions = model.predict(X_test)

score = accuracy_score(y_test,predictions) # 精度在[0,1]之间。
score
  • 修改test_size的大小,比如test_size=0.8。发现当训练集很小的时候,训练的准确度也很低。当我们给模型更多并且更干净的数据时,我们能得到更准确的结果。
  • 一些模型需要数千甚至数百万个样本来训练模型。我们这个music.csv中的数据只有17条,太少了。所以不断尝试重新运行时,发现准确度不是1了。

八、模型持久性

1. 保存模型

  • 导入包:from sklearn.externals import joblib #可以保存已加载模型。 报错:cannot import name 'joblib' from 'sklearn.externals' 解决:pip install joblib, 导入包:import joblib
python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import joblib #可以保存已加载模型。

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre']) 
y =  music_data['genre']

model=DecisionTreeClassifier()
model.fit(X,y)

joblib.dump(model, 'music-recommender.joblib') #存储此模型的文件名称。

#predictions = model.predict(X)

最后生成了music-recommender.joblib文件。

2. 加载模型

python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import joblib #可以保存已加载模型。

model = joblib.load('music-recommender.joblib') #存储此模型的文件名称。

predictions = model.predict([[21,1]])
predictions

九、可视化决策树

生成music-recommender.dot文件,然后安装graphviz插件和软件,可视化。

python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre']) 
y =  music_data['genre']

model=DecisionTreeClassifier()
model.fit(X,y)

tree.export_graphviz(model,out_file='music-recommender.dot',
                     feature_names=['age','gender'], 
                     class_names=sorted(y.unique()), #重置class为genre去重后的结果。
                     label='all', #每个框都有label,以便我们阅读。
                     rounded=True, #每个框有圆角。
                     filled=True) #每个框都能填充颜色。
相关推荐
Swift社区1 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht1 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht1 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20241 小时前
Swift 数组
开发语言
xiaoyalian2 小时前
R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法
笔记·r语言·数据可视化
stm 学习ing2 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc3 小时前
《Python基础》之字符串格式化输出
开发语言·python
Red Red3 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
mqiqe4 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql