第1关:Manhattan Distance
任务描述
计算并返回a
和b
的曼哈顿距离。
设: a=[a1, a2, ..., an] b=[b1, b2, ..., bn] 那么a
和b
的曼哈顿距离为:
import numpy as np
def Student(a, b):
return np.sum(np.abs(a-b))
第2关:Polynomial Features
任务描述
对于给定的整数k
和numpy一维数组a=[a1, a2, ..., an]
,添加由a1~an组成的最多k
次的所有多项式项,并返回处理结果。
例如 k = 2
a = [2, 6, 9, 4]
返回的numpy数组是[1, 2, 6, 9, 4, 4, 12, 18, 8, 36, 54, 24, 81, 36, 16]
。
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
def Student(k, a):
poly = PolynomialFeatures(degree=k, include_bias=True)
a = np.array(a).reshape(1, -1)
a_poly = poly.fit_transform(a)
return a_poly.flatten()
第3关:Clustering
任务描述
参数是numpy二维数组X,它的形状(n,m)
表示有n
个样本、且每个样本都是m
维的。根据混合高斯分布,将这n
个样本聚成两类,分别记为0类
和1类
,返回聚类结果
和两个聚类中心
。
例如
返回两项内容:
- 聚类结果,例如
[0, 1, 0, 1, 1, 1, 1, 0, 0]
。 - 两个聚类中心,例如
[[2.7, 9.2], [13.9, 13.0]]
import numpy as np
from sklearn.mixture import GaussianMixture
def Student(X):
n,m=X.shape
gmm=GaussianMixture(n_components=2)
gmm.fit(X)
labels=gmm.predict(X)
centers=gmm.means_
return labels,centers
第4关:Car Evaluation (cls)
问题描述
数据集“car”描述了汽车的特征和评估(类别)。
关于汽车的特征有6项:
- 买入价:可能的值有
0(低)
、1(中等)
、2(高)
、3(很高)
四种 - 维护费:可能的值有
0(低)
、1(中等)
、2(高)
、3(很高)
四种 - 门数:可能的值有
2
,3
,4
,5
四种 - 载客量:可能的值有
2
,4
,5
三种 - 车尾箱:可能的值有
0(小)
,1(中)
,2(大)
三种 - 安全性:可能的值有
0(低)
、1(中等)
、2(高)
三种
相应地,每辆车有一个评估,但不是以数值形式标记的,而是以类别形式标记的。评估类别有四种,分别是:unacc
, acc
, good
, vgood
,分别表示不可接受
、可接受
、好
、很好
。
完整的数据集的前13行呈现如下的样子:
任务描述
在右侧编辑器补充Student函数代码,完成以下任务:
-
打开“
/data/bigfiles/car_train.csv
”并读取里面的数据进行学习。考生可以根据需要进行数据预处理和选择适当的模型。这个数据集具有所有特征和评估标签。 -
打开“
/data/bigfiles/car_test_X.csv
”并读取里面的数据进行预测。这个数据集只有所有特征,没有评估类别,因为评估类别就是要预测的结果。 -
返回预测结果。
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
def Student():
# 读取训练数据
train_data = pd.read_csv('/data/bigfiles/car_train.csv')
X_train = train_data.drop('评估', axis=1)
y_train = train_data['评估']
# 读取测试数据
test_data = pd.read_csv('/data/bigfiles/car_test_X.csv')
X_test = test_data
# 数据预处理
# 处理缺失值
X_train.fillna(X_train.mean(), inplace=True)
X_test.fillna(X_test.mean(), inplace=True)
# 特征编码
le = LabelEncoder()
for col in X_train.columns:
if X_train[col].dtype == 'object':
X_train[col] = le.fit_transform(X_train[col])
X_test[col] = le.transform(X_test[col])
# 划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)
# 选择模型并训练
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_val)
# 计算准确率
accuracy = accuracy_score(y_val, y_pred)
# 预测测试集
y_test_pred = model.predict(X_test)
return y_test_pred