声明:内容非原创,代码来自葁sir

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 导入数据集
seeds = pd.read_csv('data/seeds.csv',sep = '\t',header = None)
seeds.head()
0 1 2 3 4 5 6 7
0 15.26 14.84 0.8710 5.763 3.312 2.221 5.220 Kama
1 14.88 14.57 0.8811 5.554 3.333 1.018 4.956 Kama
2 14.29 14.09 0.9050 5.291 3.337 2.699 4.825 Kama
3 13.84 13.94 0.8955 5.324 3.379 2.259 4.805 Kama
4 16.14 14.99 0.9034 5.658 3.562 1.355 5.175 Kama
# 观察小麦有多少类
seeds[7].value_counts()
Kama        70
Rosa        70
Canadian    70
Name: 7, dtype: int64
seeds[7].value_counts().plot(kind = 'bar')
<AxesSubplot:>

# 或者用seaborn
import seaborn as sns
sns.set()
# seaborn 常用图像
# barplot()
# scatterplot()
# swanrmplot()
# boxplot()
# violinplot()
# countplot()
# pairplot()
# heatmap()
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Lasso,RidgeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import MinMaxScaler,StandardScaler

X = seeds.iloc[:,:7].copy()
# X = seeds.values[:,:7].copy() # 但是这样复制 numpy.ndarray
X.shape
(210, 7)
X
0 1 2 3 4 5 6
0 15.26 14.84 0.8710 5.763 3.312 2.221 5.220
1 14.88 14.57 0.8811 5.554 3.333 1.018 4.956
2 14.29 14.09 0.9050 5.291 3.337 2.699 4.825
3 13.84 13.94 0.8955 5.324 3.379 2.259 4.805
4 16.14 14.99 0.9034 5.658 3.562 1.355 5.175
... ... ... ... ... ... ... ...
205 12.19 13.20 0.8783 5.137 2.981 3.631 4.870
206 11.23 12.88 0.8511 5.140 2.795 4.325 5.003
207 13.20 13.66 0.8883 5.236 3.232 8.315 5.056
208 11.84 13.21 0.8521 5.175 2.836 3.598 5.044
209 12.30 13.34 0.8684 5.243 2.974 5.637 5.063

210 rows × 7 columns

y =  seeds.iloc[:,-1].copy()
# y = seeds.values[:,-1].copy()
y.shape
(210,)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=1)
# 封装函数来进行knn试探性运算
def knn_score(k,X,y):# 构造算法对象knn = KNeighborsClassifier(n_neighbors = k)scores = []train_scores = []for i in range(100):# 拆分X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=1)# 训练knn.fit(X_train,y_train)# 评价模型scores.append(knn.score(X_test,y_test))# 经验评分train_scores.append(knn.score(X_train,y_train))return np.array(scores).mean(),np.array(train_scores).mean()# 调参
result_dict = {}
k_list = [1,3,5,7,9,11]
for k in k_list:score,train_score = knn_score(k,X,y)result_dict[k] = [score,train_score]
result_dict
{1: [0.9047619047619047, 1.0],3: [0.9047619047619047, 0.9642857142857139],5: [0.8571428571428572, 0.9285714285714287],7: [0.8571428571428572, 0.9345238095238096],9: [0.8809523809523812, 0.9226190476190478],11: [0.8809523809523812, 0.9226190476190478]}
pd.DataFrame(result_dict).T
0 1
1 0.904762 1.000000
3 0.904762 0.964286
5 0.857143 0.928571
7 0.857143 0.934524
9 0.880952 0.922619
11 0.880952 0.922619
result = pd.DataFrame(result_dict).T.copy()
result.columns = ['Test','Train']
result
Test Train
1 0.904762 1.000000
3 0.904762 0.964286
5 0.857143 0.928571
7 0.857143 0.934524
9 0.880952 0.922619
11 0.880952 0.922619
result.plot()
plt.xticks(k_list)
plt.show()

进阶版

# z-score (x-x.mean)/ x.std  N(0,1)
# MinMaxScaller (x-x.min)/(x.max-x.min)  0-1
# 异常值 空值 数据分布查看
X.shape
(210, 7)
# 查看统计学指标
X.describe().T
count mean std min 25% 50% 75% max
0 210.0 14.847524 2.909699 10.5900 12.27000 14.35500 17.305000 21.1800
1 210.0 14.559286 1.305959 12.4100 13.45000 14.32000 15.715000 17.2500
2 210.0 0.870999 0.023629 0.8081 0.85690 0.87345 0.887775 0.9183
3 210.0 5.628533 0.443063 4.8990 5.26225 5.52350 5.979750 6.6750
4 210.0 3.258605 0.377714 2.6300 2.94400 3.23700 3.561750 4.0330
5 210.0 3.700201 1.503557 0.7651 2.56150 3.59900 4.768750 8.4560
6 210.0 5.408071 0.491480 4.5190 5.04500 5.22300 5.877000 6.5500
def standard_X(X):X_copy = X.copy() # 拿数据for col_name in X_copy.columns: # 取列名col_data = X_copy[[col_name]] # 根据列名拿列数据,两个方括号是因为要二维数组# fit_transformstand_data = StandardScaler().fit_transform(col_data.values) # 标准化X_copy[col_name] = stand_data # 将数据替换成标准化后的数据return X_copy

standard_X(X).describe([0.01,0.25,0.5,0.75,0.99]).T
# standard_X(X).describe([0.01,0.25,0.5,0.75,0.99]).T
count mean std min 1% 25% 50% 75% 99% max
0 210.0 -5.392512e-17 1.002389 -1.466714 -1.397504 -0.887955 -0.169674 0.846599 2.072913 2.181534
1 210.0 9.146123e-17 1.002389 -1.649686 -1.474607 -0.851433 -0.183664 0.887069 2.023505 2.065260
2 210.0 1.322091e-15 1.002389 -2.668236 -2.588824 -0.598079 0.103993 0.711677 1.678118 2.006586
3 210.0 -2.182910e-15 1.002389 -1.650501 -1.464372 -0.828682 -0.237628 0.794595 2.154459 2.367533
4 210.0 -2.030122e-16 1.002389 -1.668209 -1.634930 -0.834907 -0.057335 0.804496 1.936725 2.055112
5 210.0 -3.679596e-16 1.002389 -1.956769 -1.857934 -0.759148 -0.067469 0.712379 2.519905 3.170590
6 210.0 -1.337554e-16 1.002389 -1.813288 -1.633810 -0.740495 -0.377459 0.956394 2.130797 2.328998

查看数据分布

经过对标准化数据describe查看99分位数 发现标签为2和5的两个列 有较大差距

stand_X = standard_X(X)
for col_name in stand_X.columns:sns.distplot(stand_X[col_name])plt.title(col_name)plt.show()

分箱操作

10 3000 5000 10000000

以5000为分割点 分割出高收入 低收入 进行映射 (减少数据之间的差异)

# 0 0 1 1
X[0] = pd.cut(X[0],bins = 5,labels = [0,1,2,3,4])
# 将数据进行切割,防止过拟合
X[0]
0      2
1      2
2      1
3      1
4      2..
205    0
206    0
207    1
208    0
209    0
Name: 0, Length: 210, dtype: category
Categories (5, int64): [0 < 1 < 2 < 3 < 4]
sns.countplot(X[0])
C:\Anaconda\lib\site-packages\seaborn\_decorators.py:36: FutureWarning: Pass the following variable as a keyword arg: x. From version 0.12, the only valid positional argument will be `data`, and passing other arguments without an explicit keyword will result in an error or misinterpretation.warnings.warn(<AxesSubplot:xlabel='0', ylabel='count'>

# 拆所有数据
for col_name in X.columns:X[col_name] = pd.cut(X[col_name],bins = 5,labels = [0,1,2,3,4])
X
0 1 2 3 4 5 6
0 2 2 2 2 2 0 1
1 2 2 3 1 2 0 1
2 1 1 4 1 2 1 0
3 1 1 3 1 2 0 0
4 2 2 4 2 3 0 1
... ... ... ... ... ... ... ...
205 0 0 3 0 1 1 0
206 0 0 1 0 0 2 1
207 1 1 3 0 2 4 1
208 0 0 1 0 0 1 1
209 0 0 2 0 1 3 1

210 rows × 7 columns

knn = KNeighborsClassifier()
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state = 1)
knn.fit(X_train,y_train)
KNeighborsClassifier()
knn.score(X_train,y_train)
0.9166666666666666
knn.score(X_test,y_test)
0.9523809523809523

机器学习实战:小麦种子(封装函数进行调参、标准化、绘图查看数据分布)相关推荐

  1. [机器学习数据挖掘]机器学习实战决策树plotTree函数完全解析

    [机器学习&数据挖掘]机器学习实战决策树plotTree函数完全解析 http://www.cnblogs.com/fantasy01/p/4595902.html点击打开链接 import ...

  2. 机器学习实战中的函数学习记录

    title: 机器学习实战中的函数学习记录 date: 2020-05-01 09:20:50 tags: [python函数] categories: 机器学习实战 更多内容请关注我的博客 记录机器 ...

  3. 加载svr模型_机器学习XGBoost实战,网格搜索自动调参,对比随机森林,线性回归,SVR【完整代码(含注释)+数据集见原文链接】...

    建议:阅读2020.8.7的文章,完全了解GDBT和XGBT的原理. 机器学习- XGBoost,GDBT[过程:决策树,集成学习,随机森林,GDBT,XGBT,LightGBM] 本次实践内容: 数 ...

  4. 机器学习之R语言caret包trainControl函数(控制调参)

    机器学习之R语言caret包trainControl函数(控制调参) trainControl参数详解 源码 参数详解 示例 trainControl参数详解 源码 caret::trainContr ...

  5. 大数据预测实战-随机森林预测实战(四)-模型调参

    之前对比分析的主要是数据和特征层面,还有另一部分非常重要的工作等着大家去做,就是模型调参问题,在实验的最后,看一下对于树模型来说,应当如何进行参数调节. 调参是机器学习必经的一步,很多方法和经验并不是 ...

  6. R语言机器学习mlr3:特征选择和hyperband调参

    获取更多R语言和生信知识,请关注公众号:医学和生信笔记. 公众号后台回复R语言,即可获得海量学习资料! 目录 Hyperband调参 特征选择 filters 计算分数 计算变量重要性 组合方法(wr ...

  7. 机器学习 算法总结(二) 调参技巧

    偏差和方差 在统计学习框架下,Error = Bias + Variance.Error指的模型的预测错误率,由两部分组成,一部分是由于模型太简单而带来的估计不准确的部分(Bias),另一部分是由于模 ...

  8. 机器学习--Gradient Boosting Machine(GBM)调参方法详解 转 面试问到的

    https://www.cnblogs.com/zongfa/p/9502830.html

  9. 机器学习狗太苦逼了!自动化调参哪家强?

    机器学习狗太苦逼了!自动化调参哪家强? https://mp.weixin.qq.com/s/gqN0fDIJBoxyAxYaC2dI-w 作者|Facundo Santiago译者|李志编辑|Deb ...

最新文章

  1. Servlet + JSP(EL表达式)
  2. 山东省2021年普通高考成绩录取去向查询,2018年山东高考录取去向查询时间及入口...
  3. linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问
  4. 分享一些优化博客的心得
  5. 关于Stop The World的几个问题
  6. c语言英文单词倒着,C语言实现英文单词助手
  7. TensorFlow学习笔记--第一节 hello TensorFlow
  8. 开源组织之FSF与OSI,开源协议之BSD、GPL、APACHE
  9. MsDos下的Debug调试器与8080汇编小实验
  10. Python学习笔记---day06数据类型(中)
  11. word excel如何用印章生成器软件在线制作电子印章 电子公章图片
  12. Keep it simple stupid
  13. Gradle剔除依赖
  14. HDU 6058 Kanade's sum 逆序求第k大
  15. WPS、Excel对大量数据进行统计公式计算
  16. 英特尔发布酷睿系列 | 历史上的今天
  17. HTML 常用特殊符号
  18. 惊闻Google Reader将被关闭
  19. 使用Webdriver进行自动化测试--ljw
  20. 0413-0417数字资产每周数据速览 | TokenInsight

热门文章

  1. 1225-上期所结算延迟+我脑子坏了,写作业不看要求,多写了一个哈哈哈。
  2. LeetCode 172. Factorial Trailing Zeroes
  3. 如何写一篇英文文章的Summary?
  4. 自动驾驶浪潮下,如何给技术迭代插上数据的“翅膀”?
  5. 2018年第20周(2018-5-18)周末总结
  6. JAVA打印输出杨辉三角前n行_Java 打印n行杨辉三角数据
  7. 逻辑为基、数企赋能(NO.8)—八大消极思维定势
  8. 秃头有救了,科学家发现神奇分子SCUBE3
  9. live2d-widget 看板娘(改)
  10. 戴尔7559如何进入bios