sklearn 鸢尾花

上次使用weka对鸢尾花数据集进行了一个预测,这次使用sklearn试一下。其实sklearn貌似内置了iris的数据,可以直接用,但是为了直观一点,还是自己去下载数据。然后为了方便之后带到其他情况中,分成两个数据来处理。

照旧,数据集在这里可以找到。

这里处理成一个比较方便的格式。 格式如下:

Class	sepal_length	sepal_width	petal_length	petal_width
Iris-setosa	5.1	3.5	1.4	0.2
Iris-setosa	4.9	3	1.4	0.2
Iris-setosa	5	3.6	1.4	0.2
Iris-setosa	5.4	3.9	1.7	0.4
Iris-setosa	4.6	3.4	1.4	0.3
Iris-setosa	5	3.4	1.5	0.2
Iris-setosa	4.4	2.9	1.4	0.2
Iris-setosa	5.4	3.7	1.5	0.2
Iris-setosa	4.8	3.4	1.6	0.2
Iris-setosa	4.3	3	1.1	0.1
Iris-setosa	5.7	4.4	1.5	0.4
Iris-setosa	5.4	3.9	1.3	0.4
Iris-setosa	5.1	3.5	1.4	0.3

随意弄一些作为测试组。


试一试用ComplementNB算法来训练

from sklearn.naive_bayes import ComplementNB
import pandas as pd
import joblib

# 处理成数字
def normalization(arff):
	df = pd.read_table(arff, sep="\t", header=0, index_col=False)
	for col in df.columns.values.tolist():
		if col == "Class":
			for i in df["Class"].index:
				if df.loc[i, "Class"] == "Iris-setosa":
					df.loc[i, "Class"] = 0
				elif df.loc[i, "Class"] == "Iris-versicolor":
					df.loc[i, "Class"] = 1
				else:
					df.loc[i, "Class"] = 2
	return df
	
model = ComplementNB()
train = normalization("train.txt")
xtrain = train.iloc[:, 1:]
ytrain = train["Class"]
ytrain = ytrain.astype("int")

clf = model.fit(xtrain, ytrain)

test = normalization("test.txt")
xtest = test.iloc[:, 1:]
predict_clf = list(clf.predict(xtest))

结果并没有特别好,但是流程是走通了。多换几个模型试一试就可以了。