【數據分析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)

在這裏插入圖片描述

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