本文整理汇总了Python中sklearn.tree.DecisionTreeRegressor类的典型用法代码示例。如果您正苦于以下问题:Python DecisionTreeRegressor类的具体用法?Python DecisionTreeRegressor怎么用?Python DecisionTreeRegressor使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DecisionTreeRegressor类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: CustomClassifier
class CustomClassifier(BaseEstimator, ClassifierMixin):
"""Predicts the majority class of its training data."""
def __init__(self):
global class_instance
class_instance += 1
self.instance = class_instance
#print "instance:", self.instance
def __del__(self):
global class_instance
class_instance -= 1
def fit(self, X, y, sample_weight=array([])):
# 1st Adaboost iteration: just return the current volatility
if self.instance <= 2:
self.y = y
return self
# 2+ Adaboost iteration: use linera regreession as a weak learner
else:
self.regr = DecisionTreeRegressor(max_depth=8)
#self.regr = linear_model.Lasso(alpha=0.01,fit_intercept=False,normalize=False,max_iter=10000000) # they call lambda alpha
self.regr.fit(X, y)
def predict(self, X):
# 1st Adaboost iteration: just return the current volatility
if self.instance <= 2:
return X[:,6] # return 6th element of feature vector (which is the current volatility)
# 2+ Adaboost iteration: use linera regreession as a weak learner
else:
return self.regr.predict(X)
开发者ID:tamedro,项目名称:BuySignalPredictor,代码行数:30,代码来源:fast_adaboosttree_predict_vol_1year_ahead.py
示例2: model_complexity
def model_complexity(X_train, y_train, X_test, y_test):
"""Calculate the performance of the model as model complexity increases."""
print "Model Complexity: "
# We will vary the depth of decision trees from 2 to 25
max_depth = np.arange(1, 25)
train_err = np.zeros(len(max_depth))
test_err = np.zeros(len(max_depth))
for i, d in enumerate(max_depth):
# Setup a Decision Tree Regressor so that it learns a tree with depth d
regressor = DecisionTreeRegressor(max_depth=d)
# Fit the learner to the training data
regressor.fit(X_train, y_train)
# Find the performance on the training set
train_err[i] = performance_metric(y_train, regressor.predict(X_train))
# Find the performance on the testing set
test_err[i] = performance_metric(y_test, regressor.predict(X_test))
# Plot the model complexity graph
model_complexity_graph(max_depth, train_err, test_err)
开发者ID:gokulvanan,项目名称:mlfun,代码行数:25,代码来源:boston_housing.py
示例3: learning_curve
def learning_curve(depth, X_train, y_train, X_test, y_test):
"""Calculate the performance improvement of the model, as training size increases."""
# create 50 equally spaced markers for the the graph's X axis
sizes = np.round(np.linspace(1, len(X_train), 50))
# create 50 open bins to fill in the training and test errors
train_err = np.zeros(len(sizes))
test_err = np.zeros(len(sizes))
print "Decision Tree with Max Depth: "
print depth
for i, s in enumerate(sizes):
# train classifier and test on each level of depth complexity
regressor = DecisionTreeRegressor(max_depth=depth)
regressor.fit(X_train[:s], y_train[:s])
# fill in the training and test error
train_err[i] = performance_metric(y_train[:s], regressor.predict(X_train[:s]))
test_err[i] = performance_metric(y_test, regressor.predict(X_test))
# create the learning curve graph, using the calculated information
learning_curve_graph(sizes, train_err, test_err)
return test_err[-1]
开发者ID:jonmhong,项目名称:Boston-Housing-Prices,代码行数:26,代码来源:boston_housing.py
示例4: learning_curve
def learning_curve(depth, X_train, y_train, X_test, y_test, iteration=None):
"""Calculate the performance of the model after a set of training data."""
# We will vary the training set size so that we have 50 different sizes
sizes = np.linspace(1, len(X_train), 50)
train_err = np.zeros(len(sizes))
test_err = np.zeros(len(sizes))
print "Decision Tree with Max Depth: "
print depth
for i, s in enumerate(sizes):
# Create and fit the decision tree regressor model
regressor = DecisionTreeRegressor(max_depth=depth)
regressor.fit(X_train[:s], y_train[:s])
# Find the performance on the training and testing set
train_err[i] = performance_metric(y_train[:s], regressor.predict(X_train[:s]))
test_err[i] = performance_metric(y_test, regressor.predict(X_test))
# Plot learning curve graph
learning_curve_graph(depth, sizes, train_err, test_err)
# added to produce figure 2
if iteration is not None:
print "Final error at max_depth={}: {}".format(depth, test_err[-1])
fully_trained_error[depth - 1][iteration] = test_err[-1]
开发者ID:grschafer,项目名称:mlnano-project1,代码行数:28,代码来源:boston_housing.py
示例5: test_decision_tree_regression
def test_decision_tree_regression(filename):
start_time = time.time()
scores = []
from sklearn.tree import DecisionTreeRegressor
df = pd.read_csv(filename)
h_indep = df.columns[:-1]
h_dep = df.columns[-1]
for _ in xrange(10):
# print "- ",
sys.stdout.flush()
msk = np.random.rand(len(df)) < 0.4
train_data = df[msk]
test_data = df[~msk]
# print len(train_data), len(test_data)
assert (len(train_data) + len(test_data) == len(df)), "Something is wrong"
train_indep = train_data[h_indep]
train_dep = train_data[h_dep]
test_indep = test_data[h_indep]
test_dep = test_data[h_dep]
dt = DecisionTreeRegressor()
dt.fit(train_indep, [i for i in train_dep.values.tolist()])
prediction = dt.predict(test_indep)
from sklearn.metrics import mean_absolute_error
scores.append(mean_absolute_error(test_dep, prediction))
# print len(confusion_matrices),
extract_name = filename.split("/")[-1].split(".")[0] + ".p"
# import pickle
# pickle.dump(confusion_matrices, open("./Results_RF_Classification/CM_" + extract_name, "wb"))
print round(np.mean(scores), 3), round(time.time() - start_time, 3), "sec"
开发者ID:vivekaxl,项目名称:ScratchPad,代码行数:33,代码来源:testing_classification.py
示例6: arbolesRegresion
def arbolesRegresion(caract):
clf = DecisionTreeRegressor(min_samples_leaf=10, min_samples_split=15, max_depth=13, compute_importances=True)
importancias = [0,0,0,0,0,0,0,0,0,0,0,0,0]
mae=mse=r2=0
kf = KFold(len(boston_Y), n_folds=10, indices=True)
for train, test in kf:
trainX, testX, trainY, testY=boston_X[train], boston_X[test], boston_Y[train], boston_Y[test]
nCar=len(caract)
train=np.zeros((len(trainX), nCar))
test=np.zeros((len(testX), nCar))
trainYNuevo=trainY
for i in range(nCar):
for j in range(len(trainX)):
train[j][i]=trainX[j][caract[i]]
for k in range(len(testX)):
test[k][i]=testX[k][caract[i]]
trainYNuevo=np.reshape(trainYNuevo, (len(trainY), -1))
clf.fit(train, trainYNuevo)
prediccion=clf.predict(test)
# clf.fit(trainX, trainY)
# prediccion=clf.predict(testX)
mae+=metrics.mean_absolute_error(testY, prediccion)
mse+=metrics.mean_squared_error(testY, prediccion)
r2+=metrics.r2_score(testY, prediccion)
feature_importance = clf.feature_importances_
feature_importance = 100.0 * (feature_importance / feature_importance.max())
for i in range(13):
importancias[i] = importancias[i] + feature_importance[i]
print 'Error abs: ', mae/len(kf), 'Error cuadratico: ', mse/len(kf), 'R cuadrado: ', r2/len(kf)
for i in range(13):
importancias[i] = importancias[i]/10
sorted_idx = np.argsort(importancias)
pos = np.arange(sorted_idx.shape[0]) + .5
importancias = np.reshape(importancias, (len(importancias), -1))
boston = datasets.load_boston()
pl.barh(pos, importancias[sorted_idx], align='center')
pl.yticks(pos, boston.feature_names[sorted_idx])
pl.xlabel('Importancia relativa')
pl.show()
import StringIO, pydot
dot_data = StringIO.StringIO()
tree.export_graphviz(clf, out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("bostonTree.pdf")
开发者ID:albertoqa,项目名称:housingRegression,代码行数:60,代码来源:proyecto.py
示例7: plot_curve
def plot_curve():
# Defining our regression algorithm
reg = DecisionTreeRegressor()
# Fit our model using X and y
reg.fit(X, y)
print "Regressor score: {:.4f}".format(reg.score(X,y))
# TODO: Use learning_curve imported above to create learning curves for both the
# training data and testing data. You'll need reg, X, y, cv and score from above.
# Note: Because i didnt use all the parameters in order of function definition for learning_curve fn,
# I have to explicitly assign values to the parameters. e.g, from learning_curve fn, after 'y'
# comes 'train_sizes'. But since it is optional and I am not using that parameter, for all other parameters
# that come after, i have to explicitly assign values to the parameter (e.g cv=cv, scoring=score)
# else error
train_sizes, train_scores, test_scores = learning_curve(reg, X, y, cv=cv, scoring=score)
# Taking the mean of the test and training scores
train_scores_mean = np.mean(train_scores,axis=1)
test_scores_mean = np.mean(test_scores,axis=1)
# Plotting the training curves and the testing curves using train_scores_mean and test_scores_mean
plt.plot(train_sizes ,train_scores_mean,'-o',color='b',label="train_scores_mean")
plt.plot(train_sizes,test_scores_mean ,'-o',color='r',label="test_scores_mean")
# Plot aesthetics
plt.ylim(-0.1, 1.1)
plt.ylabel("Curve Score")
plt.xlabel("Training Points")
plt.legend(bbox_to_anchor=(1.1, 1.1))
plt.show()
开发者ID:okeonwuka,项目名称:PycharmProjects,代码行数:31,代码来源:LearningCurve.py
示例8: decision_tree_regressor
def decision_tree_regressor(X, y, labels):
regressor = DecisionTreeRegressor(max_depth=3)
regressor.fit(X, y)
estimates_z = regressor.predict(X)
leaves = regressor.apply(X)
leaves_hash = np.zeros(np.max(leaves) + 1)
for i in range(len(y)):
if (estimates_z[i] - y[i]) > 0.05 and estimates_z[i] > 0.6 and y[i] > 0:
# print estimates_z[i]
# print y[i]
# print estimates_z[i]-y[i]
# print ((estimates_z[i]-y[i])>0.1 and estimates_z[i]>0 and y[i]>0)
# print leaves[i]
leaves_hash[leaves[i]] += 1
# print leaves_hash[leaves[i]]
else:
leaves_hash[-1] += 1
# print regressor.tree_.decision_path(X)
print regressor.tree_.feature
print regressor.tree_.threshold
print leaves_hash
print regressor.feature_importances_
visualize_tree(regressor.tree_, labels)
return estimates_z
开发者ID:ebalczewski,项目名称:subgroup_prediction,代码行数:29,代码来源:ImportDataTest.py
示例9: train_learning_model_decision_tree_ada_boost
def train_learning_model_decision_tree_ada_boost(df):
#code taken from sklearn
X_all, y_all = preprocess_data(df)
X_train, X_test, y_train, y_test = split_data(X_all, y_all)
tree_regressor = DecisionTreeRegressor(max_depth = 6)
ada_regressor = AdaBoostRegressor(DecisionTreeRegressor(max_depth=6), n_estimators = 500, learning_rate = 0.01, random_state = 1)
tree_regressor.fit(X_train, y_train)
ada_regressor.fit(X_train, y_train)
y_pred_tree = tree_regressor.predict(X_test)
y_pred_ada = ada_regressor.predict(X_test)
mse_tree = mean_squared_error(y_test, y_pred_tree)
mse_ada = mean_squared_error(y_test, y_pred_ada)
mse_tree_train = mean_squared_error(y_train, tree_regressor.predict(X_train))
mse_ada_train = mean_squared_error(y_train, ada_regressor.predict(X_train))
print ("MSE tree: %.4f " %mse_tree)
print ("MSE ada: %.4f " %mse_ada)
print ("MSE tree train: %.4f " %mse_tree_train)
print ("MSE ada train: %.4f " %mse_ada_train)
开发者ID:longnd84,项目名称:machine-learning,代码行数:25,代码来源:trader_regressor.py
示例10: learning_curve
def learning_curve(depth, X_train, y_train, X_test, y_test):
"""Calculate the performance of the model after a set of training data."""
# We will vary the training set size so that we have 50 different sizes
sizes = np.round(np.linspace(1, len(X_train), 50))
train_err = np.zeros(len(sizes))
test_err = np.zeros(len(sizes))
print "Decision Tree with Max Depth: "
print depth
for i, s in enumerate(sizes):
# Create and fit the decision tree regressor model
regressor = DecisionTreeRegressor(max_depth=depth)
regressor.fit(X_train[:s], y_train[:s])
# Find the performance on the training and testing set
train_err[i] = performance_metric(y_train[:s], regressor.predict(X_train[:s]))
test_err[i] = performance_metric(y_test, regressor.predict(X_test))
# if depth >= 4 and depth <= 6:
# pl.figure()
# pl.plot(y_test, 'bo')
# pl.plot(regressor.predict(X_test), color='red')
# pl.savefig("test_data_depth_" + str(depth))
# Plot learning curve graph
learning_curve_graph(sizes, train_err, test_err, depth)
开发者ID:aranair,项目名称:udacity-machine-learning-engineer,代码行数:29,代码来源:boston_housing.py
示例11: CART
def CART(self):
" CART"
# Apply random forest Classifier to predict the number of bugs.
if self.smoteit:
self.train = SMOTE(
self.train,
atleast=50,
atmost=101,
resample=self.duplicate)
if not self.tuning:
clf = DecisionTreeRegressor(random_state=1)
else:
clf = DecisionTreeRegressor(max_depth=int(self.tunings[0]),
min_samples_split=int(self.tunings[1]),
min_samples_leaf=int(self.tunings[2]),
max_features=float(self.tunings[3] / 100),
max_leaf_nodes=int(self.tunings[4]),
criterion='entropy', random_state=1)
features = self.train.columns[:-2]
klass = self.train[self.train.columns[-2]]
# set_trace()
clf.fit(self.train[features].astype('float32'), klass.astype('float32'))
preds = clf.predict(
self.test[self.test.columns[:-2]].astype('float32')).tolist()
return preds
开发者ID:queenstina,项目名称:Transfer-Learning,代码行数:26,代码来源:vapp.py
示例12: fit_model1
def fit_model1(X, y):
""" Performs grid search over the 'max_depth' parameter for a
decision tree regressor trained on the input data [X, y]. """
# Create cross-validation sets from the training data
cv_sets = ShuffleSplit(X.shape[0], n_iter=10, test_size=0.20, random_state=0)
# TODO: Create a decision tree regressor object
regressor = DecisionTreeRegressor()
regressor.fit(X, y)
# TODO: Create a dictionary for the parameter 'max_depth' with a range from 1 to 10
params = {'max_depth': (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)}
# TODO: Transform 'performance_metric' into a scoring function using 'make_scorer'
scoring_fnc = make_scorer(performance_metric)
#print(regressor.predict(X))
##scoring_fnc = make_scorer(mean_squared_error)
# TODO: Create the grid search object
grid_obj = GridSearchCV(regressor, params, scoring=scoring_fnc, cv=cv_sets)
# Fit the grid search object to the data to compute the optimal model
grid = grid_obj.fit(X, y)
# Return the optimal model after fitting the data
return grid.best_estimator_
开发者ID:zhihongwei1229,项目名称:my_repository,代码行数:27,代码来源:boston_property.py
示例13: learning_curve
def learning_curve(depth, X_train, y_train, X_test, y_test):
"""Calculate the performance of the model after a set of training data."""
# We will vary the training set size so that we have 50 different sizes
sizes = np.round(np.linspace(1, len(X_train), 50))
train_err = np.zeros(len(sizes))
test_err = np.zeros(len(sizes))
sizes = [int(ii) for ii in sizes]
print "Decision Tree with Max Depth: "
print depth
for i, s in enumerate(sizes):
# Create and fit the decision tree regressor model
regressor = DecisionTreeRegressor(max_depth=depth)
regressor.fit(X_train[:s], y_train[:s])
# Find the performance on the training and testing set
train_err[i] = performance_metric(y_train[:s], regressor.predict(X_train[:s]))
test_err[i] = performance_metric(y_test, regressor.predict(X_test))
# Plot learning curve graph
learning_curve_graph(sizes, train_err, test_err)
开发者ID:obergmartin,项目名称:boston_housing,代码行数:25,代码来源:boston_housing.py
示例14: test_boston
def test_boston(self):
from sklearn.tree import DecisionTreeRegressor as DecisionTreeRegressorSklearn
model = DecisionTreeRegressor(tree_type='oblivious', max_n_splits=3)
model_sklearn = DecisionTreeRegressorSklearn()
dataset = load_boston()
mse = []
mse_sklearn = []
for fold in range(5):
X_train, X_test, y_train, y_test = train_test_split(
dataset.data, dataset.target, test_size=0.33)
model.fit(X_train, y_train)
y = model.predict(X_test)
mse.append(mean_squared_error(y, y_test))
model_sklearn.fit(X_train, y_train)
y = model_sklearn.predict(X_test)
mse_sklearn.append(mean_squared_error(y, y_test))
mean_mse = np.mean(mse)
mean_mse_sklearn = np.mean(mse_sklearn)
print(mean_mse, mean_mse_sklearn)
# Check that our model differs in MSE no worse than 50%
self.assertTrue(np.abs(mean_mse - mean_mse_sklearn) / mean_mse_sklearn < 0.5)
开发者ID:dmitru,项目名称:pines,代码行数:26,代码来源:test_models.py
示例15: fit_predict_model
def fit_predict_model(city_data):
'''Find and tune the optimal model. Make a prediction on housing data.'''
# Get the features and labels from the Boston housing data
X, y = city_data.data, city_data.target
print X
# Setup a Decision Tree Regressor
regressor = DecisionTreeRegressor()
parameters = {'max_depth':(1,2,3,4,5,6,7,8,9,10)}
reg = GridSearchCV(regressor, parameters,scoring=make_scorer(metrics.mean_squared_error,greater_is_better=False))
print reg.fit(X, y)
depth_values= list()
for i in xrange(101):
reg.fit(X,y)
depth_values.append(int(reg.best_params_['max_depth']))
print "Best model parameter: " + str(np.median(depth_values))
# Fit the learner to the training data
# Use the model to predict the output of a particular sample
regressor = DecisionTreeRegressor(max_depth=np.median(depth_values))
print "Final Model: "
print regressor
regressor.fit(X, y)
x = [11.95, 0.00, 18.100, 0, 0.6590, 5.6090, 90.00, 1.385, 24, 680.0, 20.20, 332.09, 12.13]
y = regressor.predict(x)
print "House: " + str(x)
print "Prediction: " + str(y)
开发者ID:rahul1990gupta,项目名称:MLND,代码行数:34,代码来源:boston_housing.py
示例16: test_bootstrap_samples
def test_bootstrap_samples():
"""Test that bootstraping samples generate non-perfect base estimators."""
rng = check_random_state(0)
X_train, X_test, y_train, y_test = train_test_split(boston.data,
boston.target,
random_state=rng)
base_estimator = DecisionTreeRegressor().fit(X_train, y_train)
# without bootstrap, all trees are perfect on the training set
ensemble = BaggingRegressor(base_estimator=DecisionTreeRegressor(),
max_samples=1.0,
bootstrap=False,
random_state=rng).fit(X_train, y_train)
assert_equal(base_estimator.score(X_train, y_train),
ensemble.score(X_train, y_train))
# with bootstrap, trees are no longer perfect on the training set
ensemble = BaggingRegressor(base_estimator=DecisionTreeRegressor(),
max_samples=1.0,
bootstrap=True,
random_state=rng).fit(X_train, y_train)
assert_greater(base_estimator.score(X_train, y_train),
ensemble.score(X_train, y_train))
开发者ID:2011200799,项目名称:scikit-learn,代码行数:26,代码来源:test_bagging.py
示例17: SimpleGB
class SimpleGB(BaseEstimator):
def __init__(self, tree_params_dict, iters, tau):
self.tree_params_dict = tree_params_dict
self.iters = iters
self.tau = tau
def fit(self, X_data, y_data):
self.base_algo = DecisionTreeRegressor(**self.tree_params_dict).fit(X_data, y_data)
self.estimators = []
curr_pred = self.base_algo.predict(X_data)
for iter_num in range(self.iters):
# Нужно посчитать градиент функции потерь
grad = 0. # TODO
# Нужно обучить DecisionTreeRegressor предсказывать антиградиент
# Не забудьте про self.tree_params_dict
algo = DecisionTreeRegressor().fit(X_data, y_data) # TODO
self.estimators.append(algo)
# Обновите предсказания в каждой точке
curr_pred += 0. # TODO
return self
def predict(self, X_data):
# Предсказание на данных
res = self.base_algo.predict(X_data)
for estimator in self.estimators:
res += self.tau * estimator.predict(X_data)
# Задача классификации, поэтому надо отдавать 0 и 1
return res > 0.
开发者ID:MariyaZamyatina,项目名称:Data_Mining_in_Action_2018_Spring,代码行数:29,代码来源:gb_impl_example.py
示例18: nn_lin
def nn_lin(self, testX, neighbors):
l = DecisionTreeRegressor()
return np.mean(self.Y[neighbors])
l.fit(self.X[neighbors], self.Y[neighbors])
# for idx in np.where(l.coef_)[0]:
# self.active[idx]+=1
return l.predict([testX])[0]
开发者ID:edgelord,项目名称:Social-Outcome-Modeling,代码行数:7,代码来源:preprocess.py
示例19: train_decision_tree
def train_decision_tree(time_regression_df, test_size, random_state, max_depth, export_testset):
time_regression_df_train, time_regression_df_test = cv.train_test_split(time_regression_df, test_size=test_size, random_state=random_state)
y_train = time_regression_df_train['trip_time']
x_train = time_regression_df_train.ix[:, 0:6]
y_test = time_regression_df_test['trip_time']
x_test = time_regression_df_test.ix[:, 0:6]
if export_testset:
xy_test = pd.concat([x_test, y_test], axis=1)
xy_test.to_csv('../data/' + filename_prefix + '_testset.csv')
tic = time.time()
regtree = DecisionTreeRegressor(max_depth=max_depth, min_samples_split=3, random_state=random_state)
regtree.fit(x_train, y_train)
elapsed = time.time() - tic
print(elapsed)
export_meta_data(regtree, x_test, y_test, elapsed)
target_location = ('../treelib/' + filename_prefix + '_tree_depth_' + str(regtree.tree_.max_depth))
dump_model(regtree, target_location)
return regtree
开发者ID:nikha1,项目名称:nyc-taxi,代码行数:25,代码来源:preprocessing.py
示例20: TestDecisionTreeRegressorConverter
class TestDecisionTreeRegressorConverter(TestCase):
def setUp(self):
np.random.seed(1)
self.est = DecisionTreeRegressor(max_depth=2)
self.est.fit([
[0, 0],
[0, 1],
[1, 0],
[1, 1],
], [0, 1, 1, 1])
self.ctx = TransformationContext(
input=[IntegerNumericFeature('x1'), StringCategoricalFeature('x2', ['zero', 'one'])],
model=[IntegerNumericFeature('x1'), StringCategoricalFeature('x2', ['zero', 'one'])],
derived=[],
output=[IntegerNumericFeature('output')]
)
self.converter = DecisionTreeConverter(
estimator=self.est,
context=self.ctx,
mode=DecisionTreeConverter.MODE_REGRESSION
)
def test_transform(self):
p = self.converter.pmml()
tm = p.TreeModel[0]
assert tm.MiningSchema is not None, 'Missing mining schema'
assert len(tm.MiningSchema.MiningField) == 3, 'Wrong number of mining fields'
assert tm.Node is not None, 'Missing root node'
assert tm.Node.recordCount == 4
assert tm.Node.True_ is not None, 'Root condition should always be True'
开发者ID:mindis,项目名称:sklearn-pmml,代码行数:30,代码来源:test_decisionTreeClassifierConverter.py
注:本文中的sklearn.tree.DecisionTreeRegressor类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论