美文网首页Python
python机器学习2

python机器学习2

作者: 西萌XXX | 来源:发表于2021-01-13 15:39 被阅读0次

一.数据处理

数据来源https://github.com/wuyimengmaths/data,进行一些简单的数据处理,并用决策树模型进行预测。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 16
from sklearn.model_selection import train_test_split, cross_val_score, cross_validate
from sklearn.tree import DecisionTreeClassifier

df = pd.read_csv(r'C:\Users\PC\cpsc330\lectures\data/students.csv') ##自己下载好的文件路径
##df.head() 查看表前几条数据
df.columns = ["meat", "grade", "cilantro"] ##更换表头名
##df.describe() 查看数据整体的描述
scatter = plt.scatter(df["meat"], df["grade"], c=df["cilantro"]=="Yes", cmap=plt.cm.coolwarm);
plt.xlabel("Meat consumption (% days)");
plt.ylabel("Expected grade (%)");
plt.legend(scatter.legend_elements()[0], ["No", "Yes"]);
##df["cilantro"].value_counts() 查看是否吃香菜的情况
X = df[["meat", "grade"]]  ##X.head()
y = df["cilantro"]       ##y.head()
modelfirst = DecisionTreeClassifier(max_depth=None)
modelfirst.fit(X, y)
scorefirst = modelfirst.score(X, y)
predictionfirst = modelfirst.predict([[50, 50]])

二.一些改进方法

1.将数据源进行去重

#sort_values排序
#drop_duplicates去重meat grade数值都相同的
#reset_index用来重置索引,因为有时候对dataframe做处理后索引可能是乱的
df_nodup = df.sort_values(by="cilantro").drop_duplicates(subset=df.columns[:-1]).reset_index(drop=True)

2.决策树深度这一参数改变对分值的影响

X_nodup = df_nodup[["meat", "grade"]]  ##去重后
y_nodup = df_nodup["cilantro"]  
max_depths = np.arange(1, 18)
scores = []
##遍历决策树深度的参数
for max_depth in max_depths:
    score = DecisionTreeClassifier(max_depth=max_depth).fit(X_nodup, y_nodup).score(X_nodup, y_nodup)
    scores.append(score)
plt.plot(max_depths, scores);
plt.xlabel("max depth");
plt.ylabel("accuracy score");

3.使用train_test_split函数拆分数据集

df_train, df_test = train_test_split(df_nodup, random_state=123)
如图,将去重后的数据集 随机 拆分为训练集和测试集。

image.png

再拆分,进行训练评估

X_train = df_train[["meat", "grade"]]  ##训练集特征
y_train = df_train["cilantro"]         ##训练集标签 也叫target
X_test  = df_test[["meat", "grade"]]   ##测试集特征
y_test  = df_test["cilantro"]          ##测试集标签 也叫target

model = DecisionTreeClassifier()    ##建立决策树模型
model.fit(X_train, y_train);        ##以训练集来对模型进行训练
score_train = model.score(X_train, y_train)    ## 1.0
score_test = model.score(X_test, y_test)    ##0.5

4.过拟合

当对测试数据的得分低于对训练数据的得分,产生过拟合现象,解决这个问题的一个方法是减少决策树的最大深度。

5.交叉验证评估

image.png

交叉验证评估模型代码

model_treeone = DecisionTreeClassifier(max_depth=1)
cv_score = cross_val_score(model_treeone, X_train, y_train, cv=4)
cv10_score = cross_val_score(model_treeone, X_train, y_train, cv=10)

相关文章

网友评论

    本文标题:python机器学习2

    本文链接:https://www.haomeiwen.com/subject/ebnsaktx.html