从 CSV 文件加载用于线性 SVM 分类的数据集
Loading a Dataset for Linear SVM Classification from a CSV file
我下面有一个名为 train.csv:
的 csv 文件
25.3, 12.4, 2.35, 4.89, 1, 2.35, 5.65, 7, 6.24, 5.52, M
20, 15.34, 8.55, 12.43, 23.5, 3, 7.6, 8.11, 4.23, 9.56, B
4.5, 2.5, 2, 5, 10, 15, 20.25, 43, 9.55, 10.34, B
1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, M
我正在尝试将此数据集分离并分类如下(这是我想要的输出):
[[25.3, 12.4, 2.35, 4.89. 1, 2.35, 5.65, 7, 6.24, 5.52],
[20, 15.34, 8.55, 12.43, 23.5, 3, 7.6, 8.11, 4.23, 9.56],
[4.5, 2.5, 2, 5, 10, 15, 20.25, 43, 9.55, 10.34],
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5]],
[M, B, B, M]
“[[”中的是x(样本数据),“[M,M,B,B,M]”中的是y(是与其集合相匹配的分类数据。
我正在尝试创建一个已加载的 python 代码,它可以打印出由数据及其分类分隔的数据。它与线性SVM有关。
y_list = []
x_list = []
for W in range(0, 100):
X = data_train.readline()
y = X.split(",")
y_list.append(y[10][0])
print(y_list)
z_list = []
for Z in range(0, 10):
z_list.append(y[Z])
x_list.append(z_list)
dataSet = (x_list, y_list)
print(dataSet)
注意:我知道我的范围是完全错误的。对于这种类型的示例,我完全不确定如何调整范围,谁能解释一下在这种情况下范围如何工作。
注意:我知道 "y[10][0]" 所在的追加行也是错误的。有人可以解释这些索引是如何工作的。
总的来说,我希望输出是我上面所说的输出。谢谢您的帮助。
import pandas as pd
df = pd.read_csv(/path/to/csv, header=None, index_col=False)
x = df.iloc[:,:-1].values
y = df.iloc[:,-1:].values
首先,我认为您的 CSV 文件第一行有误:
25.3, 12.4, 2.35, 4.89. 1, 2.35, 5.65, 7, 6.24, 5.52, M
我只是假设它应该是 4.89、1,而不是 4.89。 1.
其次,我建议您使用 pandas 读取该 CSV,然后执行此操作:
import pandas as pd
data = pd.read_csv('prueba.csv', header=None, usecols=[i for i in range(11)])
# the usecols=[i for i in range(11)] will create a list of numbers for your columns
# that line will make a dataframe called data, which will contain your data.
l = [i for i in range(10)]
X_train = data[l]
y_train = data[10]
这是为 scikit-learn 中的任何机器学习算法准备数据的最简单方法。
我认为你应该使用 pandas,这是一个帮助你阅读 csv 的库:
import pandas as pd
dataset = pd.read_csv('train.cvs')
其次可以使用train_test_split
自动拆分数据:
X_train, X_test, y_train, y_test = train_test_split(
X, y, stratify=y, test_size=0.2)
这将拆分数据,其中 X_train 和 X_test 包含 80% 的数据,y_train、y_test 包含 20% 的数据。这可以通过调整 test_size
来改变。 stratify
会自动让train和test中的classification count (M, B)的比例相等,这在机器学习中通常被认为是很好的做法。这将每次生成随机拆分。如果你想要相同的拆分,你可以使用 random_state=(SEED)
作为关键字参数。
之后您可以继续进行机器学习:
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix, classification_report
# Important to scale
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
clf = SVC()
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print(classification_report(y_test, pred))
print(confusion_matrix(y_test, pred))
我下面有一个名为 train.csv:
的 csv 文件 25.3, 12.4, 2.35, 4.89, 1, 2.35, 5.65, 7, 6.24, 5.52, M
20, 15.34, 8.55, 12.43, 23.5, 3, 7.6, 8.11, 4.23, 9.56, B
4.5, 2.5, 2, 5, 10, 15, 20.25, 43, 9.55, 10.34, B
1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, M
我正在尝试将此数据集分离并分类如下(这是我想要的输出):
[[25.3, 12.4, 2.35, 4.89. 1, 2.35, 5.65, 7, 6.24, 5.52],
[20, 15.34, 8.55, 12.43, 23.5, 3, 7.6, 8.11, 4.23, 9.56],
[4.5, 2.5, 2, 5, 10, 15, 20.25, 43, 9.55, 10.34],
[1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5]],
[M, B, B, M]
“[[”中的是x(样本数据),“[M,M,B,B,M]”中的是y(是与其集合相匹配的分类数据。
我正在尝试创建一个已加载的 python 代码,它可以打印出由数据及其分类分隔的数据。它与线性SVM有关。
y_list = []
x_list = []
for W in range(0, 100):
X = data_train.readline()
y = X.split(",")
y_list.append(y[10][0])
print(y_list)
z_list = []
for Z in range(0, 10):
z_list.append(y[Z])
x_list.append(z_list)
dataSet = (x_list, y_list)
print(dataSet)
注意:我知道我的范围是完全错误的。对于这种类型的示例,我完全不确定如何调整范围,谁能解释一下在这种情况下范围如何工作。
注意:我知道 "y[10][0]" 所在的追加行也是错误的。有人可以解释这些索引是如何工作的。
总的来说,我希望输出是我上面所说的输出。谢谢您的帮助。
import pandas as pd
df = pd.read_csv(/path/to/csv, header=None, index_col=False)
x = df.iloc[:,:-1].values
y = df.iloc[:,-1:].values
首先,我认为您的 CSV 文件第一行有误:
25.3, 12.4, 2.35, 4.89. 1, 2.35, 5.65, 7, 6.24, 5.52, M
我只是假设它应该是 4.89、1,而不是 4.89。 1.
其次,我建议您使用 pandas 读取该 CSV,然后执行此操作:
import pandas as pd
data = pd.read_csv('prueba.csv', header=None, usecols=[i for i in range(11)])
# the usecols=[i for i in range(11)] will create a list of numbers for your columns
# that line will make a dataframe called data, which will contain your data.
l = [i for i in range(10)]
X_train = data[l]
y_train = data[10]
这是为 scikit-learn 中的任何机器学习算法准备数据的最简单方法。
我认为你应该使用 pandas,这是一个帮助你阅读 csv 的库:
import pandas as pd
dataset = pd.read_csv('train.cvs')
其次可以使用train_test_split
自动拆分数据:
X_train, X_test, y_train, y_test = train_test_split(
X, y, stratify=y, test_size=0.2)
这将拆分数据,其中 X_train 和 X_test 包含 80% 的数据,y_train、y_test 包含 20% 的数据。这可以通过调整 test_size
来改变。 stratify
会自动让train和test中的classification count (M, B)的比例相等,这在机器学习中通常被认为是很好的做法。这将每次生成随机拆分。如果你想要相同的拆分,你可以使用 random_state=(SEED)
作为关键字参数。
之后您可以继续进行机器学习:
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix, classification_report
# Important to scale
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
clf = SVC()
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print(classification_report(y_test, pred))
print(confusion_matrix(y_test, pred))