python机器学习之KNN预测QSAR生物浓缩类别

KNN预测QSAR生物浓缩类别

  数据来源:http://archive.ics.uci.edu/ml/datasets/QSAR+Bioconcentration+classes+dataset

import numpy
import pandas   #导入Excel文件
from sklearn.neighbors import KNeighborsClassifier   #机器学习算法库,没有深度学习算法

shen=pandas.read_csv(r"D:\Python\代码\Machine-Learn\1-KNN\data\shenwu.csv")
print("总数据条数:{};列数:{}".format(shen.shape[0],shen.shape[1]))shen.head()
总数据条数:779;列数:14
  CAS SMILES Set nHM piPC09 PCD X2Av MLOGP ON1V N-072 B02[C-N] F04[C-O] Class logBCF
0 100-02-7 O=[N+](c1ccc(cc1)O)[O-] Train 0 0.0 1.49 0.14 1.35 0.72 0 1 5 1 0.74
1 100-17-4 O=[N+](c1ccc(cc1)OC)[O-] Train 0 0.0 1.47 0.14 1.70 0.88 0 1 5 1 0.93
2 100-18-5 c1cc(ccc1C(C)C)C(C)C Train 0 0.0 1.20 0.25 4.14 2.06 0 0 0 3 3.24
3 100-25-4 O=[N+]([O-])c1ccc(cc1)[N+](=O)[O-] Train 0 0.0 1.69 0.13 1.89 0.79 0 1 8 3 -0.40
4 100-40-3 C=CC1CCC=CC1 Train 0 0.0 0.52 0.25 2.65 1.31 0 0 0 1 2.24
# 筛选set值为Train的训练数据
shen_train=shen[shen.Set.isin(["Train"])]
shen_test=shen[shen.Set.isin(["Test"])]
print("训练数据:{}个\n测试数据:{}个".format((shen_train.shape)[0],(shen_test.shape[0])))
shen_test.head()
训练数据:584个
测试数据:195个
  CAS SMILES Set nHM piPC09 PCD X2Av MLOGP ON1V N-072 B02[C-N] F04[C-O] Class logBCF
5 100-42-5 C=Cc1ccccc1 Test 0 0.000 1.40 0.18 2.85 0.86 0 0 0 3 1.13
12 101-53-1 Oc1ccc(cc1)Cc1ccccc1 Test 0 5.768 2.21 0.18 3.40 1.47 0 0 1 3 1.40
15 101-84-8 O(c1ccccc1)c1ccccc1 Test 0 5.614 2.21 0.16 3.40 1.31 0 0 2 1 2.57
16 102-06-7 N=C(Nc1ccccc1)Nc1ccccc1 Test 0 5.030 2.07 0.16 3.09 1.54 0 1 0 2 1.05
19 10315-98-7 O1CCN(CC1)CC(C)C Test 0 0.000 0.00 0.28 1.00 1.80 0 1 1 1 0.23

获得训练,测试数据中的训练数据和结果

# 筛选训练数据中的结果数据
y_train=shen_train.iloc[:,[-2,-1]]
y_test=shen_test.iloc[:,[-2,-1]]
print("训练数据结果:\n{}\n测试数据结果:\n{}\n".format(y_train.head(),y_test.head()))

训练数据结果:

   Class  logBCF
0      1    0.74
1      1    0.93
2      3    3.24
3      3   -0.40
4      1    2.24
测试数据结果:
    Class  logBCF
5       3    1.13
12      3    1.40
15      1    2.57
16      2    1.05
19      1    0.23
# 筛选训练数据中的训练数据
x_train=shen_train.iloc[:,[3,4,5,6,7,8,9,10,11]]
x_test=shen_test.iloc[:,[3,4,5,6,7,8,9,10,11]]
print("训练数据:\n{}\n测试数据:\n{}\n".format(x_train.head(),x_test.head()))
训练数据:
   nHM  piPC09   PCD  X2Av  MLOGP  ON1V  N-072  B02[C-N]  F04[C-O]
0    0     0.0  1.49  0.14   1.35  0.72      0         1         5
1    0     0.0  1.47  0.14   1.70  0.88      0         1         5
2    0     0.0  1.20  0.25   4.14  2.06      0         0         0
3    0     0.0  1.69  0.13   1.89  0.79      0         1         8
4    0     0.0  0.52  0.25   2.65  1.31      0         0         0
测试数据:
    nHM  piPC09   PCD  X2Av  MLOGP  ON1V  N-072  B02[C-N]  F04[C-O]
5     0   0.000  1.40  0.18   2.85  0.86      0         0         0
12    0   5.768  2.21  0.18   3.40  1.47      0         0         1
15    0   5.614  2.21  0.16   3.40  1.31      0         0         2
16    0   5.030  2.07  0.16   3.09  1.54      0         1         0
19    0   0.000  0.00  0.28   1.00  1.80      0         1         1
# 查看训练数据的数据类型,当数据类型不是int时要将数据映射为数字才能进行训练

y_train.info()
<class ‘pandas.core.frame.DataFrame‘>
Int64Index: 584 entries, 0 to 776
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   Class   584 non-null    int64
 1   logBCF  584 non-null    float64
dtypes: float64(1), int64(1)
memory usage: 13.7 KB

将非int类型的数据量化为整数

def change_type(values):
    for col in values.columns[:]:
        u=values[col].unique()
        # 获取每个属性的具体属性值,argwhere方法可以获取属性值的索引值(0,1,2...),并将具体属性值映射为索引值
        def conver(x):
            return numpy.argwhere(u==x)[0,0]
        values[col]=values[col].map(conver)

change_type(x_train)
change_type(x_test)
change_type(y_train)
change_type(y_test)
y_train

584 rows × 2 columns

  Class logBCF
0 0 0
1 0 1
2 1 2
3 1 3
4 0 4
... ... ...
771 0 333
772 0 334
773 0 41
774 0 142
776 0 335
knn=KNeighborsClassifier(n_neighbors=5,weights="distance",n_jobs=-1)

knn.fit(x_train, y_train)

y_=knn.predict(x_test)

acc=(y_==y_test).mean()

print("预测生物富集因子准确率:{};预测生物富集等级准确率:{}".format(acc[1],acc[0]))
预测生物富集因子准确率:0.041025641025641026;预测生物富集等级准确率:0.4153846153846154

提高算法准确率

1,修改算法参数

knn=KNeighborsClassifier(n_neighbors=3,weights="distance",p=1,n_jobs=-1)

knn.fit(x_train, y_train)

y_=knn.predict(x_test)

acc=(y_==y_test).mean()

print("预测生物富集因子准确率:{};预测生物富集等级准确率:{}".format(acc[1],acc[0]))
预测生物富集因子准确率:0.06666666666666667;预测生物富集等级准确率:0.441025641025641

2,修改训练数据

# 最大值最小值归一化(当数据间隔很大时可以有效提高准确率,消除属性之间的差异)

x_train_min=x_train.min()

x_train_max=x_train.max()

x2_train=(x_train-x_train_min)/(x_train_max-x_train_min)

x_test_min=x_test.min()

x_test_max=x_test.max()

x2_test=(x_test-x_test_min)/(x_test_max-x_test_min)

x2_test.head()
nHM piPC09 PCD X2Av MLOGP ON1V N-072 B02[C-N] F04[C-O]
5 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.0 0.0 0.000000
12 0.0 0.008929 0.009524 0.000000 0.006849 0.007874 0.0 0.0 0.058824
15 0.0 0.017857 0.009524 0.029412 0.006849 0.015748 0.0 0.0 0.117647
16 0.0 0.026786 0.019048 0.029412 0.013699 0.023622 0.0 1.0 0.000000
19 0.0 0.000000 0.028571 0.058824 0.020548 0.031496 0.0 1.0 0.058824
knn=KNeighborsClassifier(n_neighbors=3,weights="distance",p=1,n_jobs=-1)

knn.fit(x2_train, y_train)

y_=knn.predict(x2_test)

acc=(y_==y_test).mean()

print("预测生物富集因子准确率:{};预测生物富集等级准确率:{}".format(acc[1],acc[0]))
预测生物富集因子准确率:0.02564102564102564;预测生物富集等级准确率:0.4358974358974359
# Z-score归一化

# 求平均值

x_train_mean=x_train.mean()

# 求方差

x_train_std=x_train.std()

x3_train=(x_train-x_train_mean)/x_train_std

x3_train.head()

# 求平均值

x_test_mean=x_test.mean()

# 求方差

x_test_std=x_test.std()

x3_test=(x_test-x_test_mean)/x_test_std

x3_test.head()
  nHM piPC09 PCD X2Av MLOGP ON1V N-072 B02[C-N] F04[C-O]
5 -0.858971 -0.961536 -1.433213 -1.308189 -1.621471 -1.571899 -0.37945 -0.885971 -0.901314
12 -0.858971 -0.934067 -1.399267 -1.308189 -1.597619 -1.544272 -0.37945 -0.885971 -0.706463
15 -0.858971 -0.906599 -1.399267 -1.184954 -1.597619 -1.516645 -0.37945 -0.885971 -0.511611
16 -0.858971 -0.879131 -1.365321 -1.184954 -1.573767 -1.489018 -0.37945 1.122917 -0.901314
19 -0.858971 -0.961536 -1.331375 -1.061719 -1.549914 -1.461391 -0.37945 1.122917 -0.706463
knn=KNeighborsClassifier(n_neighbors=3,weights="distance",p=1,n_jobs=-1)

knn.fit(x3_train, y_train)

y_=knn.predict(x3_test)

acc=(y_==y_test).mean()

print("预测生物富集因子准确率:{};预测生物富集等级准确率:{}".format(acc[1],acc[0]))
预测生物富集因子准确率:0.015384615384615385;预测生物富集等级准确率:0.41025641025641024
# sklearn封装为的z-score归一化操作

from sklearn.preprocessing import StandardScaler,MinMaxScaler

s=StandardScaler()

x4_train=s.fit_transform(x_train)   

# x4_train      为z-score归一化后的数据

x4_test=s.fit_transform(x_test)

m=MinMaxScaler()

x5_train=m.fit_transform(x_train)

x5_test=m.fit_transform(x_test)

# x5_train     为最大值,最小值归一化后的数据

保存算法模型

from sklearn.externals import joblib

joblib.dump(knn,‘./model‘,cache_size=9)  # 保存模型,默认保存为压缩类型,会保存所有数据,cache_size=9时为压缩最小大小
# 加载模型  model=joblib.load(‘./model‘) 

x=model.predict(x2_test) 

acc=(y_==y_test).mean() 

print("预测生物富集因子准确率:{};预测生物富集等级准确率:{}".format(acc[1],acc[0]))
预测生物富集因子准确率:0.020512820512820513;预测生物富集等级准确率:0.41025641025641024


原文地址:https://www.cnblogs.com/lq13035130506/p/12543134.html

时间: 2024-11-05 21:37:03

python机器学习之KNN预测QSAR生物浓缩类别的相关文章

分享《Python机器学习—预测分析核心算法》高清中文版PDF+高清英文版PDF+源代码

下载:https://pan.baidu.com/s/1sfaOZmuRj14FWNumGQ5ahw 更多资料分享:http://blog.51cto.com/3215120 <Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码高清中文版,338页,带目录和书签,文字能够复制粘贴.高清英文版,361页,带目录和书签,文字能够复制粘贴.中英文两版对比学习.配套源代码.经典书籍,讲解详细. 其中,高清中文版如图所示: 原文地址:http://blog.51cto.c

《Python机器学习—预测分析核心算法》高清中文版PDF+高清英文版PDF+源代码

资源链接:https://pan.baidu.com/s/1J61jH-fqwGceoId6F8mr5Q<Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码高清中文版,338页,带目录和书签,文字能够复制粘贴.高清英文版,361页,带目录和书签,文字能够复制粘贴.中英文两版对比学习.配套源代码.经典书籍,讲解详细.其中,高清中文版如图所示: 原文地址:http://blog.51cto.com/14063572/2317037

分享《Python机器学习—预测分析核心算法》+PDF+源码+Michael Bowles+沙嬴

下载:https://pan.baidu.com/s/1JnyeiZwh74MIWo1LB4pIqA 更多资料分享:http://blog.51cto.com/14087171 <Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码高清中文版,338页,带目录和书签,文字能够复制粘贴.高清英文版,361页,带目录和书签,文字能够复制粘贴.中英文两版对比学习.配套源代码.经典书籍,讲解详细. 其中,高清中文版如图所示: 原文地址:http://blog.51cto.

学习《Python机器学习—预测分析核心算法》高清中文版PDF+高清英文版PDF+源代码

在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措.从算法和Python 语言实现的角度,认识机器学习.专注于两类核心的"算法族",即惩罚线性回归和集成方法,并通过代码实例来展示所讨论的算法的使用原则.详细讨论预测模型的两类核心算法.预测模型的构建.惩罚线性回归和集成方法的具体应用和实现. 参考: <Python机器学习-预测分析核心算法>高清中文版PDF+高清英文版PDF+源代码 高清中文版,338页,带目录和书签,文字能够复制粘贴. 高清英文

python好书推荐:【A028】[异步图书].Python机器学习:预测分析核心算法

Python机器学习:预测分析核心算法pdf获取方式:点这里 请注意,本并没有直接告诉薇姬,他认为她是一个具有奉献精神和坚定信念的人.然而,对于薇姬来说,她不难承认自己具备这些特征,也很容易将其应用于自己的工作中.即使薇姬认为自己并不具备奉献精神和坚定信念,也无损这种新关系.Python机器学习:预测分析核心算法. 不管薇姬的自我评价如何,本说的都是实话,所以他的观点在最坏的情况下则会被忽视,在最好的情况下则会促使薇姬对自己(和本)感觉良好.基于人的本性,即便薇姬在现实中并不具有奉献精神和坚定信

python机器学习实战(一)

python机器学习实战(一) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7140974.html  前言 这篇notebook是关于机器学习中监督学习的k近邻算法,将介绍2个实例,分别是使用k-近邻算法改进约会网站的效果和手写识别系统.操作系统:ubuntu14.04    运行环境:anaconda-python2.7-notebook    参考书籍:机器学习实战      notebook  writer ----方阳  k-

python机器学习基础教程-鸢尾花分类

一: 环境准备: 1.导入的库: import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn 2.导入数据集 from sklearn.datasets import load_iris iris_dataset = load_iris() 二. 划分训练数据和测试数据 1. train_test_split: 将数据集打乱并进行拆分 from sklearn.model_select

七步精通Python机器学习 转

开始.这是最容易令人丧失斗志的两个字.迈出第一步通常最艰难.当可以选择的方向太多时,就更让人两腿发软了. 从哪里开始? 本文旨在通过七个步骤,使用全部免费的线上资料,帮助新人获取最基本的 Python 机器学习知识,直至成为博学的机器学习实践者.这篇概述的主要目的是带领读者接触众多免费的学习资源.这些资源有很多,但哪些是最好的?哪些相互补充?怎样的学习顺序才最好? 我假定本文的读者不是以下任何领域的专家: ?  机器学习 ?  Python ?  任何Python的机器学习.科学计算.数据分析库

Python机器学习库资料汇总

声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: 比较成熟的(广播)函数库: 用于整合C/C++和Fortran代码的工具包: 实用的线性代数.傅里叶变换和随机数生成函数. SciPy是一个开源的Python算法库和数学工具包,SciPy包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换.信号处理和图像处理.常微分方程求解和其他科