multiclassification

#DATASET: https://archive.ics.uci.edu/ml/datasets/Glass+Identification
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import sklearn
import sklearn.preprocessing as pre
df=pd.read_csv('data\glassi\glass.data')
X,y=df.iloc[:,1:-1],df.iloc[:,-1]
X,y=np.array(X),np.array(y) for idx,class_name in enumerate(sorted(list(set(y)))):
y[y==class_name]=idx from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.15,random_state=66)
f_mean, f_std = np.mean(X_train, axis=0), np.std(X_train, axis=0)
X_train = (X_train - f_mean) / f_std
X_test = (X_test - f_mean) / f_std #add a constant parameter
X_train = np.concatenate((np.ones((X_train.shape[0], 1)), X_train), axis=1)
X_test = np.concatenate((np.ones((X_test.shape[0], 1)), X_test), axis=1)
#gradient descent function

def get_classifier(X_train,y_train,num_epoch=10000,alpha=0.01):
theta=np.zeros(X_train.shape[1])
for epoch in range(num_epoch):
logist=np.dot(X_train,theta)
h=1/(1+np.exp(-logist)) #hypothesis function
cross_entropy_loss=(-y_train*np.log(h)-(1-y_train)*np.log(1-h)).mean()
gradient=np.dot((h-y_train),X_train)/y_train.size
theta-=alpha*gradient #update
return theta
def multi_classifier(X_train,y_train):
num_class=np.unique(y_train)
parameter=np.zeros((len(num_class),X_train.shape[1])) #each has an array of parameters
for i in num_class:
label_t=np.zeros_like(y_train) #use label_t to label the target class!!!
num_class=np.unique(y_train)
label_t[y_train==num_class[i]]=1 #important,
parameter[i,:]=get_classifier(X_train,label_t) #each array stands for one class's parameter
return parameter
params = multi_classifier(X_train, y_train)
def pred(parameter,X_test,y_test):
f_size=X_test.shape
l_size=y_test.shape
assert (f_size[0]==l_size[0])
logist=np.dot(X_test,np.transpose(parameter)).squeeze()
prob=1/(1+np.exp(-logist))
pred=np.argmax(prob,axis=1)
accuracy = np.sum(pred == y_test) / l_size[0] * 100
return prob, pred, accuracy
_, preds, accu = pred(params, X_test, y_test)
print("Prediction: {}\n".format(preds))
print("Accuracy: {:.3f}%".format(accu))
Prediction: [0 1 0 4 1 5 1 0 0 1 0 1 0 0 5 1 1 1 1 0 5 4 0 1 5 0 0 1 1 0 3 1 0]

Accuracy: 66.667%

最新文章

  1. PostgreSQL-PL/pgSQL-cursor,loop
  2. dietpi请暂时不要升级为jessie
  3. mysql基于“时间”的盲注
  4. (转)Oracle 在Drop表时的Cascade Constraints
  5. 使用HttpSessionListener接口监听Session的创建和失效
  6. Error:Unsupported major.minor version 51.0 .
  7. linux下rm误删除数据库文件的恢复方法
  8. 有关按位DP
  9. Unable to boot device in current state: Creating
  10. Mysql 库、表、字段 字符集
  11. 面向服务的体系架构SOA
  12. OS调度算法常用摘要
  13. MC 自己平均
  14. 【BZOJ3524/2223】[Poi2014]Couriers 主席树
  15. 如何解决在chrome中自动完成表单后input出现黄色背景
  16. URL模块之parse方法
  17. 零基础学Python--------第3章 流程控制语句
  18. ibatis中的resultMap
  19. PAT之写出这个数
  20. 51nod1967 路径定向 Fleury

热门文章

  1. 什么是http协议(一)
  2. 坚果Pro2刷魔趣系统教程,刷回锤子系统教程
  3. OpenCV使用Cmake来管理工程
  4. java中jsp的EL的定义以及使用
  5. npm+cnpm+vuecli3打包相关
  6. error while loading shared libraries: libXXXX.so: cannot open shared object file: No such file or directory
  7. okHttp3 源码分析
  8. websphere部署不能发布war文件,提示“配置库中已存在应用程序
  9. Hive数据提取
  10. 在Excel中,已知身份证号码,如何批量计算其实际年龄?