【数据分析day08】人类动作识别,癌症预测,预测年收入是否大于50K美元

练习:人类动作识别,癌症预测,预测年收入是否大于50K美元

人类动作识

在这里插入图片描述
导入数据

X_train = np.load('./动作分析/x_train.npy')
X_test = np.load('./动作分析/x_test.npy')

y_train = np.load('./动作分析/y_train.npy')
y_test = np.load('./动作分析/y_test.npy')

获取数据

knn = KNeighborsClassifier()
knn.fit(X_train, y_train)

在这里插入图片描述
预测

y_ = knn.predict(X_test)

查看100个预测结果

y_[:100]

在这里插入图片描述
查看测试数据和测试结果得分

knn.score(X_test, y_test)

在这里插入图片描述
绘制

label = {1:'步行', 2:'上楼', 3:'下楼',4:'坐着', 5:'站立', 6:'躺着'}

解决中文警告问题

plt.rcParams['font.family']='SimHei'   #黑体

可视化展示预测结果

# 6行4列
plt.figure(figsize=(4* 4.5,6* 5.5))

# 绘图
for i in range(24):
	axes = plt.subplot(6,4,i+1)
	axes.plot(X_test[i*100])
	
	# 如果预测结果不对,粗体标红
	if y_test[i*100] != y_[i*100]:
    	axes.set_title('True:%s\nPredict:%s' % (label[y_test[i*100]], label[y_[i*100]]), fontdict=dict(fontsize=(20), color='r'))
	else:
    	axes.set_title('True:%s\nPredict:%s' % (label[y_test[i*100]], label[y_[i*100]]))

在这里插入图片描述
在这里插入图片描述

癌症预测

cancer = pd.read_csv('../data/cancer.csv', sep='\t')
cancer

在这里插入图片描述
后半截
在这里插入图片描述

M: malignant 恶性的
B: benign 良性的

data = cancer.iloc[:, 2:].copy()
target = cancer.Diagnosis.values

data.shape

在这里插入图片描述

data.isnull().any()

在这里插入图片描述

X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=69)

knn = KNeighborsClassifier()
knn.fit(X_train, y_train)

在这里插入图片描述

y_ = knn.predict(X_test)
knn.score(X_test, y_test)

在这里插入图片描述

knn.score(X_train, y_train)

在这里插入图片描述
这里用knn看不出什么差异,每个图都差不多
在这里插入图片描述
所以使用“交叉表

# 使用交叉表来展示预测结果
pd.crosstab(index=y_, columns=y_test, rownames=['预测值'], colnames=['真实值'], margins=True)

在这里插入图片描述

(44 + 22) / 69

在这里插入图片描述

预测年收入是否大于50K美元

读取adult.txt文件,最后一列是年收入,并使用KNN算法训练模型,然后使用模型预测一个人的年收入是否大于50

adults = pd.read_csv('./adults.txt')
adults.head(10)

在这里插入图片描述
后半截
在这里插入图片描述
获取年龄、教育程度、职位、每周工作时间作为机器学习数据
获取薪水作为对应结果

data = adults[['age', 'education', 'occupation','hours_per_week']].copy()
target = adults[['salary']]

display(data,target)	

在这里插入图片描述
在这里插入图片描述

data.dtypes

在这里插入图片描述
数据转换,将String类型数据转换为int (因为机器学习只认识数字,需要将 ‘education’, ‘occupation’ 的字符串分类转换成数字分类,用0,1,2…代替)

【知识点】map方法,进行数据转换

  • 常规map方法:映射一个字典,再进行转换
    在这里插入图片描述

  • 高级方法:np.argwhere(), 备注:arg开头的都是返回index

    可将转换方法写成函数

      def convert_workclass(item):
      index = np.argwhere(workclass == item)[0,0]
      return index
    

    将 ‘education’, ‘occupation’ 的字符串分类转换成数字分类,用0,1,2…代替

      cols= ['education', 'occupation']
      
      for column in cols:
      	uni = data[column].unique()
      	#注意:循环体重定义函数,减少外部调用函数的时间复杂度
      	def convert(item):
      		index = np.argwhere(uni == item)[0,0]
      		return index
      		
       data[column] = data[column].map(convert)
    

查看数据类型,是否转换成功

data.dtypes

在这里插入图片描述

data

在这里插入图片描述
切片:训练数据和预测数据

knn = KNeighborsClassifier()

from sklearn.model_selection import train_test_split
X_train, x_test, y_train, y_test = train_test_split(data,target,test_size=0.1)

生成算法

第一步:训练数据

knn.fit(X_train, y_train['salary'].values)

在这里插入图片描述
第二步:预测数据

y_ = knn.predict(x_test)
display(y_, y_train['salary'].values)

在这里插入图片描述
得分

knn.score(X_train, y_train)

在这里插入图片描述

knn.score(x_test,y_test)

在这里插入图片描述
保存训练模型
from sklearn.externals import joblib

from sklearn.externals import joblib

joblib.dump(knn, 'knn.pkl')

在这里插入图片描述
导入模型

knn2 = joblib.load('knn.pkl')
y2_ = knn.predict(x_test)
display(y2_, y_train['salary'].values)

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章